题目:
跟进“删除重复数字”:
如果可以允许出现两次重复将如何处理?
样例
给出数组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