ধরা যাক A নামক একটি সংখ্যার তালিকা আছে, সব ডুপ্লিকেট সংখ্যা খুঁজে বের করে তাদের শেষ ঘটনা (last occurrence) মুছে ফেলতে হবে।
উদাহরণ: [10, 30, 40, 10, 30, 50] হলে আউটপুট [10, 30, 40, 50]।
সমাধানের ধাপসমূহ
- seen := {}, d := {}
- i = 0 থেকে len(nums)-1: d[nums[i]] ফ্রিকোয়েন্সি গণনা করুন।
- i := 0, যতক্ষণ i < len(nums): n = d[nums[i]], seen[nums[i]] কাউন্ট বাড়ান। যদি n == seen[nums[i]] এবং n > 1, nums.pop(i), i--। i++
- nums ফেরত দিন।
উদাহরণ কোড
class Solution:
def solve(self, nums):
seen = {}
d = {}
for i in range(len(nums)):
if not nums[i] in d:
d[nums[i]] = 1
else:
d[nums[i]] += 1
i = 0
while i < len(nums):
n = d[nums[i]]
if not nums[i] 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]))
ইনপুট
[10, 30, 40, 10, 30, 50]
আউটপুট
[10, 30, 40, 50]