题目:

删除排序数组中的重复数字 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;
    }
}
View Code

总耗时: 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
          
View Code

不知道为什么说下标越界,明明和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