题目
给你一个数组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; }
文章介绍了两种方法解决LeetCode上的‘移除元素’问题。一种是暴力求解,使用两层循环,时间复杂度为O(N^2);另一种是使用双指针技巧,时间复杂度优化到O(N)。两种方法都在原地修改数组且不使用额外空间。


260

被折叠的 条评论
为什么被折叠?



