Description:
Given an array nums and a value val, remove all instances of that value in-place and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
The order of elements can be changed. It doesn’t matter what you leave beyond the new length.
Example 1:
Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
It doesn't matter what you leave beyond the returned length.
Example 2:
Given nums = [0,1,2,2,3,0,4,2], val = 2,
Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4.
Note that the order of those five elements can be arbitrary.
It doesn't matter what values are set beyond the returned length.
Clarification:
Confused why the returned value is an integer but your answer is an array?
Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.
Internally you can think of this:
// nums is passed in by reference. (i.e., without making a copy)
int len = removeElement(nums, val);
// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
print(nums[i]);
}
题意:给定一个数组和一个元素val,要求将数组中的val“移除”,即元素val移动到数组的尾部,将移动后其他元素保持原数组的相对顺序;
解法:返回的结果时移动后的数组num中不等于val的元素的个数,因此,我们使用一个变量记录val的个数,最后返回num.length - val即可;我们可以将val与其后碰到的第一个不等于val的元素进行交换位置,这样可以保持元素的相对位置不变;
Java
class Solution {
public int removeElement(int[] nums, int val) {
int count = 0;
for(int i = 0; i < nums.length; i++) {
if (nums[i] == val) {
count++;
} else if (count != 0) {
nums[i] = nums[i] ^ nums[i-count];
nums[i-count] = nums[i] ^ nums[i-count];
nums[i] = nums[i] ^ nums[i-count];
}
}
return nums.length - count;
}
}