题目:
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
元素的顺序可以改变,并且对新的数组不会有影响。
样例
给出一个数组 [0,4,4,0,0,2,4,4],和值 4
返回 4 并且4个元素的新数组为[0,0,0,2]
解题:
Java程序:
public class Solution { /** *@param A: A list of integers *@param elem: An integer *@return: The new length after remove */ public int removeElement(int[] A, int elem) { // write your code here int count = A.length; // for(int i=0;i<count;i++) int i=0; while(i<count){ if(A[i]==elem){ for(int j=i;j<count-1;j++) A[j] = A[j+1]; count--; }else i++; } return count; } }
总耗时: 1782 ms
这样竟然也可以通过,这里时间复杂度是O(n2),同时你会发现,只是把数组移位了,没有真正的删除,但是这里的测试结果是输出正确情况下的长度。。。。
还有个问题就是,测试用例太少了。。。。
官当答案也是这样搞的。。。
Python程序:
class Solution: """ @param A: A list of integers @param elem: An integer @return: The new length after remove """ def removeElement(self, A, elem): # write your code here i = 0 ALen = len(A) while i<ALen: if A[i]==elem: ALen-=1 del A[i] else: i+=1 return ALen
总耗时: 286 ms
Python list 可以直接删除指定index下标的元素