原题地址(简单)

方法1—两侧双指针

思路

这个应该是最快的解,同时也是官解的方法二。
由于此题很简单,不再解析。

代码

  1. class Solution {
  2. public:
  3. int removeElement(vector<int>& nums, int val) {
  4. int len = nums.size();
  5. if(len == 0) return 0;
  6. int l = 0, r = len - 1;
  7. while(l < r) {
  8. while(r > l && nums[r] == val) r--;
  9. while(l < r && nums[l] != val) l++;
  10. swap(nums[l], nums[r]);
  11. }
  12. for(int i=0; i<len; i++)
  13. if(nums[i] == val) return i;
  14. return len;
  15. }
  16. };

官解:

  1. class Solution {
  2. public:
  3. int removeElement(vector<int>& nums, int val) {
  4. int left = 0, right = nums.size();
  5. while (left < right) {
  6. if (nums[left] == val) {
  7. nums[left] = nums[right - 1];
  8. right--;
  9. } else {
  10. left++;
  11. }
  12. }
  13. return left;
  14. }
  15. };

方法2—同侧双指针

思路

官解方法1