27. Remove Element
程序员文章站
2024-02-17 12:46:58
...
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 ofnums
containing0
,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]); }
我的思路:
每次找到一个相同的数之后,让它和最后一个数交换,然后将待交换的位置减一。最后这个待交换的位置就是最后输出的结果。这里需要注意的是边界条件的判断,需要使用while来不断地消除错误答案。
class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
int res = len;
if(len == 0) return 0;
for(int i=0;i<len;i++){
//保存check为标志位,出现一次val,减去一个数
while(nums[i]==val && i<res){
//交换
int temp = nums[res-1];
nums[res-1] = nums[i];
nums[i] = temp;
res--;
}
}
return res;
}
}
推荐阅读