给定一个数组 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://www.whosneo.com/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;
}
}