LeetCode 27.移除元素

46 阅读1分钟

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

    public int removeElement(int[] nums, int val) {
        if( nums == null || nums.length == 0 ){
            return 0;
        }
        int left = 0 ,right = nums.length - 1;
        while(left < right ){
            while( left < right && nums[left] != val ) left++;
            while( left < right && nums[right] == val) right--;
            swap(nums,left,right); 
        }
        return nums[left] == val? left:left+1;
    }
    public void swap(int[] nums, int index1, int index2){
        int temp = nums[index1];
        nums[index1] = nums[index2];
        nums[index2] = temp;
    }
}

双指针法: 明确left ,right 的含义:left 表明 [0,left] 不是val ;right表明 [right,nums.length]是val

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)