题目介绍

要求输入:给定数组nums[],数字val
要求输出:数组中不等于val的元素个数n,同时要求不等于数字val的n个元素放置在数组的前n个位置(不要求顺序)
例子
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.

方法一

这道题只关注最后数组的前n个元素。所以很容易想到我们遍历整个数组,每当遇到不等于val的值的时候,我们将计数的i值加一。同时我们将这个元素赋值给nums[i],这样就可以保证,不等于val的n个元素完美占据数组的前n个位置。
public int removeElement(int[] nums, int val) {
    int i = 0;
    for (int j = 0; j < nums.length; j++) {
        if (nums[j] != val) {
            nums[i] = nums[j];
            i++;
        }
    }
    return i;
}

方法二

当我们遇到和等于val值的元素的时候,我们将数组尾端的元素和此元素交换位置。之后减少一位遍历长度。同时在下次遍历中,我们会重新检查新swap过来的元素。

public int removeElement(int[] nums, int val) {
    int i = 0;
    int n = nums.length;
    while (i < n) {
        if (nums[i] == val) {
            nums[i] = nums[n - 1];
            // reduce array size by one
            n--;
        } else {
            i++;
        }
    }
    return n;
}

soleil阿璐
350 声望45 粉丝

stay real ~