Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3]
,
Your function should return length = 5
, and A is now [1,1,2,2,3]
.
Remove Duplicates from Sorted Array的扩展题,这题里元素可以至多重复2次~ 可以维护一个counter, 当count <= 2时,把数放到结果数组中,遇到新元素时重置counter~
class Solution:
# @param A a list of integers
# @return an integer
def removeDuplicates(self, A):
if A is None or len(A) == 0: return 0
k = 1; pre = A[0]; count = 1
for i in xrange(1, len(A)):
if A[i] == pre:
count += 1
if count <= 2:
A[k] = A[i]; k += 1
if A[i] != pre:
count = 1
A[k] = A[i]; k += 1
pre = A[i]
return k
感觉自己写的稍微有点绕,后来又看到一种更简洁的写法,代码如下:
class Solution:
# @param A a list of integers
# @return an integer
def removeDuplicates(self, A):
if A is None or len(A) == 0: return 0
k = 0
for i in xrange(len(A)):
if i < 2 or A[k - 2] != A[i]:
A[k] = A[i]
k += 1
return k