我的面试问题是需要返回一个去除重复项但最多可以保留2个重复项的数组的长度。
例如,[1, 1, 1, 2, 2, 3]
的新数组将是 [1, 1, 2, 2, 3]
。因此,新长度将为5。我想出了一个 O(2n) 的算法,如何将其改进为最快的算法?
def removeDuplicates(nums):
if nums is None:
return 0
if len(nums) == 0:
return 0
if len(nums) == 1:
return 1
new_array = {}
for num in nums:
new_array[num] = new_array.get(num, 0) + 1
new_length = 0
for key in new_array:
if new_array[key] > 2:
new_length = new_length + 2
else:
new_length = new_length + new_array[key]
return new_length
new_length = removeDuplicates([1, 1, 1, 2, 2, 3])
assert new_length == 5
我的第一个问题是我的算法是否正确?
list(set([1,1,1,2,2,3]))
呢?这也是O(n),但更简单易懂。 - logeesum(min(2, count) for count in collections.Counter(nums).values())
- Steven Rumbalski