来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-element
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
- 由于元素的顺序可以改变,因此可以考虑遍历数组,遇到相同的就用数组最后一个元素覆盖,然后数组长度减一。
int removeElement(int* nums, int numsSize, int val){
int i = 0;
while (i < numsSize) {
if (nums[i] == val) {
nums[i] = nums[numsSize - 1];
numsSize --;
}
if (nums[i] != val)
i++;
}
return numsSize;
}
- 第二种方法是题解使用的双指针法。这道题如果采用暴力解法,就是用两个for循环去遍历数组,遇到相同的元素就让这个元素后面的元素全部往前一步进行覆盖,最后的数组就是所求的数组。而双指针法就是用一个快指针和一个慢指针在一个for循环下完成两个for循环的工作。
int removeElement(int* nums, int numsSize, int val){
int slow = 0;
for (int fast = 0; fast < numsSize; fast ++) {
if (nums[fast] != val) {
nums[slow++] = nums[fast];
}
}
return slow;
}
最后
以上就是瘦瘦大门最近收集整理的关于力扣27题(数组,双指针法)的全部内容,更多相关力扣27题(数组内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复