题目介绍
要求输入:给定数组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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。