LeetCode第二十七题(移除元素)

150 阅读1分钟

元素前移法(双指针)

核心思想: 从下标0开始,依次将有序数组中的值不等于val的元素添加到数组中,并利用count统计数组中值不等于val的元素的个数,即移除后数组的新长度。简单地说,就是把数组中值不等于val的元素依次前移到数组的开始位置。

class Solution {
    public int removeElement(int[] nums, int val) {
        int count = 0;//数组中不等于val的元素的个数
        for(int i = 0; i < nums.length; i++){
            if(nums[i] != val){
                nums[count++] = nums[i];//从下标0开始将不等于val的元素添加到数组中
            }
        }
        return count;
    }
}

元素前移法(双指针)-优化

核心思想: 由于上述解法中存在值不等于val的元素的重复赋值操作的不足,例如待移除元素为数组的首元素时,数组中其他值不为val的元素需依次向前移动。

class Solution {
    public int removeElement(int[] nums, int val) {
        int left = 0;//左指针
        int right = nums.length - 1;//右指针
        while(left <= right){
            if(nums[left] == val)//左指针元素的值等于val
                nums[left] = nums[right--];//用右指针指向元素替换左指针元素
            else
                left++;
        }
        return left;
    }
}