题目描述:
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.
代码:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int flag1 = 0, flag2 = nums.size() - 1;
int length = 0;
while(flag1 <= flag2){
if(nums[flag1] != val){
flag1++;
length++;
}else{
int tmp = nums[flag1];
nums[flag1] = nums[flag2];
nums[flag2--] = tmp;
}
}
return length;
}
};
此题为easy题,题目要求给定一个数组,和一个val,要求删除数组中所有值为val的元素。并且返回删除后数组的长度l,空间复杂度为O(1),要求原数组的前l个元素为删除值为val的元素后剩余的元素。题目思路为设置两个flag并且遍历整个数组,当遍历到的值为val时,丢到数组尾(flag2位置处)。这样最后数组的前l个元素即为删除val元素后剩余的所有元素。
做的过程中想到了另外一种解题思路或许能更简单一点,即利用vector的erase函数,直接将值为val的元素消灭,感觉会简单一点:)