题目

暴力解法

image.png

  1. // 时间复杂度:O(n^2)
  2. // 空间复杂度:O(1)
  3. class Solution {
  4. public:
  5. int removeElement(vector<int>& nums, int val) {
  6. int size = nums.size();
  7. for (int i = 0; i < size; i++) {
  8. if (nums[i] == val) { // 发现需要移除的元素,就将数组集体向前移动一位
  9. for (int j = i + 1; j < size; j++) {
  10. nums[j - 1] = nums[j];
  11. }
  12. i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
  13. size--; // 此时数组的大小-1
  14. }
  15. }
  16. return size;
  17. }
  18. };

双指针

image.png

// 时间复杂度:O(n)
// 空间复杂度:O(1)
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slowIndex = 0;
        for (int fastIndex = 0; fastIndex < nums.size(); fastIndex++) {
            if (val != nums[fastIndex]) {
                nums[slowIndex++] = nums[fastIndex];
            }
        }
        return slowIndex;
    }
};