在不排序的情况下做这道题
这个题目的核心方法是把值等于val的元素用其他的元素覆盖掉。怎么覆盖呢?当然是把元素整体向前面移动。遇到一个值等于val的的元素,就把这个元素后面的所有元素向前移动一格,但是这样做会重复移动一些元素,我们可以通过一个技巧:双指针法,解决这个问题。
只要是碰到值不等于val的元素,我们就把后面的元素向前移动,直到遇到等于val的元素。每次移动元素之后,左指针就要增加一。这样保证后续的元素可以正常覆盖不需要的元素。
class Solution {
public int removeElement(int[] nums, int val) {
int left=0,right=0;
for (;right<nums.length; right++){
if(val!=nums[right]){
nums[left]=nums[right];
left++;
}
}
return left;
}
}