原题地址(简单)
方法1—两侧双指针
思路
这个应该是最快的解,同时也是官解的方法二。
由于此题很简单,不再解析。
代码
class Solution {public:int removeElement(vector<int>& nums, int val) {int len = nums.size();if(len == 0) return 0;int l = 0, r = len - 1;while(l < r) {while(r > l && nums[r] == val) r--;while(l < r && nums[l] != val) l++;swap(nums[l], nums[r]);}for(int i=0; i<len; i++)if(nums[i] == val) return i;return len;}};
官解:
class Solution {public:int removeElement(vector<int>& nums, int val) {int left = 0, right = nums.size();while (left < right) {if (nums[left] == val) {nums[left] = nums[right - 1];right--;} else {left++;}}return left;}};
方法2—同侧双指针
思路
官解方法1
