给定一个数组 nums 和一个值 val原地移除所有值与 val 相同的元素,并返回新的数组长度。

不要使用额外的空间,你必须以 O(1) 的空间复杂度原地修改输入的数组。

数组中元素的顺序可以更改。且数组中超过新长度之后的元素没有要求。

例一:
nums = [3,2,2,3], val = 3
你的函数应该返回 2,且数组的前两个元素均为 2。
在这两个元素之后的位置上的元素没有要求。

例二:
nums = [0,1,2,2,3,0,4,2], val = 2
你的函数应该返回 5,且数组的前五个元素应该包括 0,1,3,0,4。
注意,这五个元素的顺序可以是任意的。
数组中,在你放回的长度 5 之后的元素没有要求,可以为任意情况。

/**
 * 27. Remove Element
 * https://leetcode.com/problems/remove-element/
 * https://realneo.me/27-remove-element/
 */

import java.util.Arrays;

public class RemoveElement {
    public static void main(String[] args) {
        RemoveElement solution = new RemoveElement();

        int[] nums;

        nums = new int[]{3, 2, 2, 3};
        System.out.println("nums = " + Arrays.toString(nums));
        solution.removeElement(nums, 3);
        System.out.println("nums = " + Arrays.toString(nums));

        nums = new int[]{0, 1, 2, 2, 3, 0, 4, 2};
        System.out.println("nums = " + Arrays.toString(nums));
        solution.removeElement(nums, 2);
        System.out.println("nums = " + Arrays.toString(nums));
    }

    private int removeElement(int[] nums, int val) {
        int index = 0;
        for (int i = 0; i < nums.length; i++)
            if (nums[i] != val)
                nums[index++] = nums[i];

        return index;
    }
}