我是靠谱客的博主 瘦瘦大门,这篇文章主要介绍力扣27题(数组,双指针法),现在分享给大家,希望可以做个参考。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-element

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

  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;
}
  1. 第二种方法是题解使用的双指针法。这道题如果采用暴力解法,就是用两个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题(数组内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(138)

评论列表共有 0 条评论

立即
投稿
返回
顶部