移除元素
这题简单题,但是前面思路是先找到左边第一个不是val的,和右边第一个不是val的,进行交换,边界条件没有处理好,导致报错(水平真菜)
也可以直接把left是val的与right进行交换(版本2)
版本1:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left = 0;
int right = nums.size() - 1;
while (left <= right) {
// 找到左边第一个等于val的元素
while (left <= right && nums[left] != val) {
left++;
}
// 找到右边第一个不等于val的元素
while (left <= right && nums[right] == val) {
right--;
}
// 交换元素
if (left < right) {
swap(nums[left], nums[right]);
left++;
right--;
}
}
return left;
}
private:
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
};
版本2:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int left=0;
int right=nums.size()-1;
while(left<=right)
{
if(nums[left]==val)
{
nums[left]=nums[right];
right--;
}else{
left++;
}
}
return left;
}
};