LeetCode27. 移除元素

题目要求

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

不能使用额外的数组空间,你必须使用O(1)的空间复杂度完成对输入数组的修改。

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

示例1:

输入:nums = [3, 2, 2, 3], val = 3
输出:2, nums = [2, 2]

示例2:

输入: nums = [0, 1, 2, 2, 3, 0, 4, 2], val =2
输出:5, nums = [0, 1, 4, 0, 3]

只要数组新长度中的所有元素为最终答案即可,无需考虑新数组中元素的顺序性。

Java AC代码

时间复杂度:O(n),空间复杂度:O(1)。拷贝覆盖的思路进行。

class Solution
    {
        public int removeElement(int[] nums, int val)
        {
            if (nums == null || nums.length == 0) return 0;
            int k = 0;
            for (int i = 0; i < nums.length; ++i)
            {
                if (nums[i] == val)
                {
                    k++; // 如果值相等,计数器k+1
                } else
                {
                    // 值不想等,向前拷贝覆盖。
                    nums[i - k] = nums[i];
                }
            }
            return nums.length - k;
        }
    }
posted @ 2021-03-01 12:26  霍丙南  阅读(43)  评论(0编辑  收藏  举报