7. 移除元素

//给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。
    //不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
    //元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

    //根据题意,我们可以将数组分成「前后」两段:
    //前半段是有效部分,存储的是不等于 val 的元素。
    //后半段是无效部分,存储的是等于 val 的元素。
    //最终答案返回有效部分的结尾下标。


    public int removeElement(int[] nums, int val) {
        //定义变量得到数组的长度
        int j = nums.length - 1;
        //遍历
        for (int i = 0; i <= j; i++) {
            //数组与变量相等,保存在数组前面
            if (nums[i] == val) {
                swap(nums, i--, j--);
            }
        }
        //返回有效部分的结尾下标
        return j + 1;
    }
    //交换方法
    void swap(int[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }

 

posted @ 2022-03-09 20:45  随遇而安==  阅读(15)  评论(0编辑  收藏  举报