【LeetCode】第36天 - 27. 移除元素

x33g5p2x  于2021-12-15 转载在 其他  
字(0.6k)|赞(0)|评价(0)|浏览(251)

题目描述

解题思路

题目要求只需要返回新数组的长度,所以我们可以考虑遍历数组,将发现的val值的元素与最后一个非val值的元素交换位置,并使用一个count记录非val值元素的个数,count值即为新数组的长度。
(详细见代码注释)

代码实现

class Solution {
    //交换两个元素的位置
    public void sort(int[] nums, int left, int right){
        int temp = nums[left];
        nums[left] = nums[right];
        nums[right] = temp;
    }
    public int removeElement(int[] nums, int val) {
        int left = 0, right = nums.length - 1;      //双指针分别指向数组的第一个元素和最后一个元素
        int count = 0;                              //记录新数组的长度
        while(left<=right){
            if(nums[left] == val){                  //数组中存在想要移除的元素
                if(nums[right] != val){             //将该位置的元素与最后一个非val值的元素交换
                    sort(nums,left,right);
                    --right;                        //右指针左移
                }else{
                    --right;                        //右指针左移找到最后一个非val值的元素
                    continue;               
                }
            }
            ++left;                                 //非val值,左指针右移
            ++count;                                //新数组长度+1
        }

        return count;
    }
}

相关文章