题目
给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
链接:https://leetcode.cn/problems/remove-element
题解
1、暴力求解
时间复杂度O(N^2),空间复杂度O(1)
int removeElement(int* nums, int numsSize, int val) { int size = numsSize; for (int i = 0; i < size; i++) { if (nums[i] == val) { for (int j = i; j < size; j++) { nums[j] = nums[j + 1]; } i--; size--; } } return size; }
2、双指针
时间复杂度O(N),空间复杂度O(1)
int removeElement(int* nums, int numsSize, int val) { int src = 0; int dst = 0; while (src < numsSize) { if (nums[src] != val) nums[dst++] = nums[src++]; else src++; } return dst; }