数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖!
这道题我想到了两种解法:
1.双重for循环,时间复杂度O(n^2)
2.双指针法,时间复杂度O(n)
第一种方法默认大家都会!
思路(双指针)
小提示:JAVA中的指针,不同于C++,JAVA中不需要程序员对指针进行操作, 不过,这不代表JAVA没有指针,事实上,JAVA的指针操作都被底层代码封装了
我们用两个指针,一个快指针,一个慢指针
快指针:探路!遍历数组,如果不等于要删除的目标值val,那么就赋值给慢指针
慢指针:修改原数组,把元素个数累加,返回修改后数组的元素个数
代码实现(双指针法)
class Solution {
public int removeElement(int[] nums, int val) {
int fastIndex=0,slowIndex=0;
for(;fastIndex<nums.length;fastIndex++){
if(nums[fastIndex]!=val){
nums[slowIndex++]=nums[fastIndex];
}
}
return slowIndex;
}
}
很简洁,我相信大家都看得懂!