讨论/《数组类算法》 - 移除元素 - 解题思路/
《数组类算法》 - 移除元素 - 解题思路
共 12 个回复

移动元素本质上不就是和移动零差不多嘛,相当于移动val到末尾,这样就起到了原地移动元素的作用

1

int removeElement(int* nums, int numsSize, int val){

int i=0;
while(i<numsSize)
{
    /*当我们遇到 nums[i]==val 时,我们可以将当前元素与最后一个元素进行交换,并释放最后一个元素。这实际上使数组的大小减少了 1.*/
    if(nums[i]==val)
    {
        nums[i]=nums[numsSize-1];
        numsSize--;//数组大小-1
    }
    else
    {
        i++;
    }
}
return numsSize;

}

1

记录位置,更新位置即可

#include <iostream>
#include <vector>
using namespace std;

class Solution {
 public:
  int removeElement(vector<int>& nums, int val) {
    int i = 0, j = 0;
    for (; i < nums.size(); i++)
      if (nums[i] != val) nums[j++] = nums[i];
    return j;
  }
};

极简代码

class Solution {
    public int removeElement(int[] nums, int val) {
        int i = 0, j = 0;
        while (j < nums.length) if (nums[j++] != val) nums[i++] = nums[j-1];
        return i;
    }
}

依旧双指针

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int left = 0;
		int right = 0;
		for (right = 0; right<nums.size(); right++){
			if (nums[right] != val){
				swap(nums[left], nums[right]);
				left++;
			}
		}
		return left;
    }
};

c++

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int cur=0;
        for(int i=0;i<nums.size();i++){
            if(nums[i] != val) {
                nums[cur] = nums[i];
                cur++;
            }
        }
        return cur;
    }
};
class Solution {
    public int removeElement(int[] nums, int val) {
        int n = 0;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] != val){
                nums[n] = nums[i];
                n++;
            }
        }
        return n;
    }
}

别人的双指针和自己的双指针,简直不是一个

image.png

c++使用pop_back()

class Solution {
public:
    int removeElement(vector<int> &v, int val) {
        int l = v.size();
        int k = 0;
        for (int i = 0; i < l; ++i) {
            if (v[i] != val) {
                v[k] = v[i];
                k++;
            }
        }
        for (int i = k; i < l; ++i) {
            v.pop_back();
        }
        return v.size();
    }
};