栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++解OJ题——移除元素

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++解OJ题——移除元素


  所学习的东西要去实践,不然只是你以为你会了。

一.原题如下

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

二.示例如下


四.分析与图示
  根据题意,依旧采用快慢双指针。起初让两个指针都指向数组第一个元素的位置,如果快指针所指示的位置元素同val值相等,则让fast++,否则将fast所指示的数组元素,赋值给slow所指示的数组元素,同时slow++后,再fast++…。用图示描述如下:

  不需要移除,两者同时移动,如下:

  同理:

  此时fast所指示的元素需要被覆盖,则只需要Fast移动,slow不动,如下:

  同理:
  上述图示中,fast所指示的数据元素同val不相等,则需要将其移动到slow所指示的位置上,即赋值给slow,赋值后slow指向下一个位置,fast指向下一个位置,如下:

  最终结果,如下:
  fast的值不小于数组元素个数,循环结束,最终slow的值就是新数组元素的数组元素个数。


五.代码实现

//C实现
int removeElement(int* nums, int numsSize, int val){
    int slow=0;//慢指针
    int fast=0;//快指针
    while(fast
        if(nums[fast]!=val)
        {
            nums[slow]=nums[fast];
            slow++;
        }
        fast++;
    }
    return slow;
}
//C++实现
class Solution {
public:
    int removeElement(vector& nums, int val) {
        int slow=0;
        int fast=0;
        while(fast
            if(nums[fast]!=val)
            {
                nums[slow]=nums[fast];
                slow++;
            }
            fast++;
        }
        return slow;
    }

我是老胡,又是充实的一天!❤️ ❤️

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955244.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号