Cho danh sách , tìm tất cả số trùng lặp và xóa lần xuất hiện cuối cùng của từng số đó.
Ví dụ: → [10, 30, 40, 50] (xóa 10 cuối và 30 cuối).
Giải thuật (Đếm tần suất + Duyệt xóa lần cuối)
- Đếm tần suất mỗi số → dict
. - Duyệt mảng với dict
đếm đã thấy bao nhiêu lần. - Khi
và1: xóa phần tử này (lần cuối), giảm index.
Ví dụ minh họa
class Solution:
def solve(self, nums):
seen = {}
d = {}
for i in range(len(nums)):
if nums[i] not in d:
d[nums[i]] = 1
else:
d[nums[i]] += 1
i = 0
while i < len(nums):
n = d[nums[i]]
if nums[i] not in seen:
seen[nums[i]] = 1
else:
seen[nums[i]] += 1
if n == seen[nums[i]] and n > 1:
nums.pop(i)
i -= 1
i += 1
return nums
ob = Solution()
print(ob.solve([10, 30, 40, 10, 30, 50])) # Output: [10, 30, 40, 50]
Đầu vào
[10, 30, 40, 10, 30, 50]
Đầu ra
[10, 30, 40, 50]