一、问题:
Given an array
and a value, 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
in place
with constant memory.
The order
of elements can be changed. It doesn't matter what you leave beyond
the new
length.
Example:
Given input array nums = [
3,
2,
2,
3], val =
3
Your function should
return length =
2,
with the first two elements
of nums being
2.
二、解题一:
class Solution {
public:
int removeElement(
vector<int>& nums,
int val)
{
int i =
0;
int n = nums.size();
while (i < n) {
if (nums[i] == val) {
nums[i] = nums[n -
1];
n--;
}
else
i++;
}
return n;
}
};
解题二:
class Solution {
public:
int removeElement(
vector<int>& nums,
int val)
{
int n = nums.size();
int begin =
0;
for (
int i =
0; i<n; i++)
if (nums[i] != val) nums[begin++] = nums[i];
return begin;
}
};