Cho danh sách số nums, đếm số danh sách con (liên tiếp) mà phần tử đầu và cuối bằng nhau.
Ví dụ
Đầu vào: nums = [10, 15, 13, 10].
Đầu ra: 5 (danh sách con: [10], [15], [13], [10], [10,15,13,10]).
Thuật toán
- Khởi tạo
num_sublists = len(nums)(mỗi phần tử đơn lẻ là một danh sách con hợp lệ). - Đếm tần suất mỗi giá trị trong
nums. - Với mỗi tần suất
v > 1, thêm(v-1)*v//2vàonum_sublists(số cặp chỉ mục có giá trị giống nhau). - Trả về
num_sublists.
Mã nguồn Python
from collections import defaultdict
class Solution:
def solve(self, nums):
num_sublists = len(nums)
d = defaultdict(int)
for n in nums:
d[n] += 1
for v in d.values():
if v != 1:
num_sublists += (v-1)*v//2
return num_sublists
ob = Solution()
print(ob.solve([10, 15, 13, 10]))
Đầu vào / Đầu ra
Input: [10, 15, 13, 10]
Output: 5