力扣 27. 移除元素

55 阅读1分钟

image.png

image.png

在不排序的情况下做这道题

这个题目的核心方法是把值等于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;
    }
}