lintcode :Remove Duplicates from Sorted Array II 删除排序数组中的重复数字 II

时间:2023-03-08 15:23:24
lintcode :Remove Duplicates from Sorted Array II 删除排序数组中的重复数字 II

题目:

删除排序数组中的重复数字 II

跟进“删除重复数字”:

如果可以允许出现两次重复将如何处理?

样例

给出数组A =[1,1,1,2,2,3],你的函数应该返回长度5,此时A=[1,1,2,2,3]

解题:

在这里看到的

与上一题方法很类似,这里保存相同元素长度小于2的保存在原来的数组中

很巧妙

Java程序:

public class Solution {
/**
* @param A: a array of integers
* @return : return an integer
*/
public int removeDuplicates(int[] nums) {
// write your code here
int i = 0,j;
int numsLen = nums.length;
int cur=0;
while(i<numsLen){
for( j=i;j<numsLen;j++){
if(nums[i]!=nums[j])
break; if((j-i+1)<=2) // 只记录长度小于等于2 的下标对应的元素
nums[cur++] = nums[i];
}
i = j;// 下一个不相同元素开始
}
return cur;
}
}

总耗时: 2826 ms

Python程序:

class Solution:
"""
@param A: a list of integers
@return an integer
"""
def removeDuplicates(self, A):
# write your code here
i = 0
ALen = len(A)
cur = 0
k = 0
while i<ALen:
for j in range(i,ALen):
if A[i]!=A[j]:
k = j
break
if (j-i+1)<=2:
A[cur] = A[i]
cur = cur + 1
i = k
return cur

不知道为什么说下标越界,明明和java的一样的
错误结果如下:

30% 数据通过测试.

输入   [-8,0,1,2,3]

期望答案   [-8,0,1,2,3]

错误信息   Traceback (most recent call last): File "Main.py", line 8, in LEN = solution.removeDuplicates(nums) File "Solution.py", line 18, in removeDuplicates A[cur] = A[i] IndexError: list assignment index out of range EXITCODE=1