当前位置: 首页 > article >正文

力扣26题-删除有序数组中的重复项

题目

        给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

自己的解法:

int removeDuplicates(vector<int>& nums) {
        int end=0,p=1;
        while(p<nums.size())
        {
            if(nums[end]==nums[p])
                p++;
            else
                nums[++end]=nums[p];
        }
        int invalidNums=nums.size()-end-1;
        while(invalidNums)
        {
            nums.pop_back();
            invalidNums--;
        }
        return (end+1);
}

        我自己的解法其实和B站大佬的解法思想是一样的,都是双指针。但是我写出来的程序繁杂冗长,随后借鉴了大佬的双指针解法如下:

int removeDuplicates(vector<int>& nums) {
        int k=1;
        for(int i=1;i<nums.size();i++)
        {
            if(nums[i]!=nums[i-1])
                nums[k++]=nums[i];
        }
        return k;
}

学习随想:

        1.这种整型的数组指针其中一个可以用 for 循环中的循环变量代替,以减少代码量,如大佬用循环变量 i 来代替了快指针。

        2.再者,是不是一般都会用循环变量来固定代替快指针呢?我的猜想是可能循环变量i++的属性完美地表达了快指针作为工作指针一直向后遍历的属性。实际是这样吗,还需通过刷题来用实践形成理论。

        3.题目会自己将前k个数组元素维护为新的数组,所以可以省略掉我自己解中第二个while循环,达到更简洁的应试代码。


http://www.kler.cn/a/505171.html

相关文章:

  • SpringAOP前置——代理模式
  • 光谱相机的光谱分辨率可以达到多少?
  • 豆包MarsCode:可以在线用的智能AI编程助手
  • favor的本质
  • 2024年11月系统架构设计师考试复盘
  • 如何通过腾讯云平台执行SFT微调大语言模型
  • Vue篇-07
  • Python爬取豆瓣图书网Top250 实战
  • 【工具类】获取日出日落时间的Java工具类
  • 全网唯一的工具 苹果手机备忘录全自动导出备份
  • QT与基恩士PLC采用上位链路通信实现
  • Jmeter配置服务代理器 Proxy(二)
  • 云计算技术深度解析与代码实践
  • 机器学习实战33-LSTM+随机森林模型在股票价格走势预测与买卖点分类中的应用
  • Python AI教程之二十一:监督学习之支持向量机(SVM)算法
  • 「实战应用」如何为DHTMLX JavaScript 甘特图添加进度线
  • 深入剖析 Wireshark:网络协议分析的得力工具
  • 在 Go语言中一个字段可以包含多种类型的值的设计与接种解决方案
  • 如何修复Android上未安装的应用程序
  • 【声音场景分类--论文阅读】