T27. Remove Element【Easy】
题目
给定一个数组和一个值,删除该值所有对应位置的值,并返回新的长度。
不要新建另一个数组,必须使用常量内存来完成算法。
可以更改元素的顺序。只要算出新的长度其他的都是浮云。
思路
怎么说呢,一开始我很天真的觉得只要返回正确的长度就好了,但是!它的 OG 机制还是要判断最后留下的数组是怎么样子的,该删的元素还得删!
主要思路是检测到目标值,把 len-1,并从尾巴上把值填到这个值的位置
然后要注意一点!就是这个 while ,不能用 if 来代替!举个例子:
[3,2,2,3],要删除3的时候,用if把最后的3换到前面来,
3还是存在并在后面不会被检测出来,会返回[3,2,2],而正确的数组是[2,2]
代码
代码取自 Top Solution,稍作注释
哎...这代码似乎没啥好说的,就是这一句🙂
public int removeElement(int[] A, int elem) {
int len = A.length;
for (int i = 0 ; i< len; ++i){
//检测到值,把 len-1,并从尾巴上把值填到这个值的位置,如果换过来还是,继续换
while (A[i]==elem && i< len) {
A[i]=A[--len];
}
}
return len;
}
补充
可以了解一下 --i,和 i-- 的 区别~
题中就是:
A[i]=A[--len] 等价于 a=len-1;A[i]=A[a];
A[i]=A[len--] 等价于 A[i]=A[len];a=len-1;
网友评论