移除元素
这题简单题,但是前面思路是先找到左边第一个不是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;}
};