假设我们有一个传感器,会不停地向 HQ 传输已经归类好数据,数据的格式全部是数字(种类编号),且已经按照从小到大的顺序排列,大概是 [1,1,4,5,7,9] 这样的,但是我们的需求在于,希望知道有多少个种类,那么该如何解决呢?

如果这样一个问题放在关系型数据库中操作的话就非常方便了,学过 SQL 语言的同学很快就会想到 DISTINCT 关键字,剩下的就是拼接一下 SELECT 语句出来就好了,但是如果我们的问题不是 SQL 相关的呢?

力扣(LeetCode) 中 "26.删除排序数组中的重复项" 正是一个类似要求的题目。

Loading...​leetcode-cn.com

注意在题目当中要求的是:不要使用额外的数组空间,你必须在 原地修改输入数组 并在使用 O(1) 额外空间的条件下完成,意味着不能通过新建数组存放的方式解决,那么对于这样一个问题我们该如何解决呢?

可以考虑增加一个游标的方式(命名为:index),遍历整个数组,当遇到前一个和后一个不相等的时候就给游标自增,这样的话对于相同的元素可以直接跳过不统计,最后返回”游标的大小+1“(也即不重复的元素的个数),代码实现如下:

class Solution {public:int removeDuplicates(vector<int>& nums) {if (nums.empty())return 0;int index = 0;for (int i = 1; i < nums.size(); i++) {if (nums[index] != nums[i])nums[++index] = nums[i];}return index + 1;
}

这样的话就符合了题目所要求的各个复杂度以及就地统计的原则,当然,如果你对 STL 比较熟悉的话这道题其实可以偷懒一下:

class Solution {public:int removeDuplicates(vector<int>& nums) {return distance(nums.begin(), unique(nums.begin(), nums.end()));}
};

比较容易是不是?我们对题目做一点改变,由于传感器有一个误差的区间,对于所有可能的种类我们允许它最多出现两次,认为是不同的两个种类,这样的话问题该如何解决呢?

由于要求是两次,所以我们可以考虑通过增加一个变量的方式来记录种类编号出现的次数就可以了嘛,代码实现如下:

class Solution {public:int removeDuplicates(vector<int>& nums) {if (nums.size() <= 2)return nums.size();int index = 2;for (int i = 2; i < nums.size(); i++){if (nums[i] != nums[index - 2])nums[index++] = nums[i];}return index;}
};

这样的话我们又可以正确地统计到种类个数了。

以上是 力扣(LeetCode)中两道题目 "26.删除排序数组中的重复项" 和 "80.删除排序数组中的重复项 II"的拓展,由于这两道题是从简单到复杂的的一个过程,从对于题目的解答中我们可以慢慢培养接近一个问题的解决方案的思路,掌握了解决特定情况问题的方法之后,就可以慢慢得到一个通用问题的解决方案,一次次迭代下去,想到新的思路就比较容易了。

本文作者:Nova

声明:本文归 “力扣” 版权所有,如需转载请联系。

ios 数组中的字典排序_题解 | 26.删除排序数组中的重复项相关推荐

  1. 26. 删除排序数组中的重复项 golang

    26. 删除排序数组中的重复项 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 ...

  2. [LeetCode][Python][C#]刷题记录 26. 删除排序数组中的重复项

    这道题我真的纠结好久,因为没注意那个原地的题目要求,所以很奇怪怎么我电脑运行成功,但是LeetCode上运行就是不对.气哭. 感谢群友lino的帮助.他试了set方法不行,直接喂给我的答案了... 题 ...

  3. C++描述 LeetCode 26. 删除排序数组中的重复项

    C++描述 LeetCode 26. 删除排序数组中的重复项   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客 ...

  4. C语言试题六十三之请编写函数fun:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。

    1. 题目 请编写函数fun,其功能是:将s所指字符串中ascii值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研 ...

  5. LeetCode 25K 个一组翻转链表26删除排序数组中的重复项

    如果问题或者其他方法还请分享,如加入打卡微信搜索bigsai回复进群一起打卡. K个一组翻转链表 题目要求 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小 ...

  6. LeetCode(#26)————删除排序数组中的重复项

    题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示 ...

  7. c++ 二维数组 排序_【算法】排序算法之计数排序

    前几回,我们已经对[算法]排序算法之冒泡排序.[算法]排序算法之插入排序.[算法]排序算法之希尔排序.[算法]排序算法之选择排序.[算法]排序算法之快速排序.[算法]排序算法之归并排序.[算法]排序算 ...

  8. python查找两个数组中相同的元素_找出两个数组的相同元素,最优算法?

    在做新旧接口交替过程中,遇到了老接口和新接口json数据有些不一致的情况,需要比较两个json对象,把相同的元素赋其中一个json对象中变量的值.而且其中一个json最后输出格式还需要改变下属性名,思 ...

  9. 以下用来处理python字典的方法中正确的是_以下关于Python的说法中正确的是哪一项?...

    [判断题]Python内置函数len____可以返回列表.元组.字典.集合.字符串以及range对象中元素个数. [判断题]Python内置函数max____用来返回序列中的最大元素. [判断题]Py ...

最新文章

  1. 路由器snmp配置_基于keepalived配置数据库主从实现高可用
  2. F5金飞:“双十一”安全事项三部曲
  3. 关于oracle中to_char和to_date的用法
  4. ipython和python怎么用_如何使用IPython重新加载和自动加载?
  5. Apache的Mod_rewrite学习(RewriteRule重写规则的语法)
  6. 算法-两最长回文子串
  7. Android应用--简、美音乐播放器增加音量控制
  8. lamp mysql5.0_LAMP-MYSQL安装全步骤
  9. 让你提前认识软件开发(15):程序调试的利器—日志
  10. Solidity的三种合约间的调用方式 call、delegatecall 和 callcode
  11. 北大青鸟php培训怎么样,北大青鸟php培训怎么样
  12. 西科大计算机网络期末复习考点
  13. android entries属性,ListPreference需要设置两个属性:android:entries和android:entryValues...
  14. CSS3 animation动画,风车旋转、loading、人物走路动画案例
  15. 次世代zbrush骷颅头高模雕刻 艺术头骨SP模型材质贴图讲解
  16. 睡眠多少分钟一个循环_你知道睡眠周期吗?
  17. AI笔记: 数学基础之正交矩阵与矩阵的QR分解
  18. 小白投资理财必看:图解基金买入与卖出规则
  19. 使用dos命令行启动服务
  20. struts2框架的总结

热门文章

  1. oracle一列有多个约束,在oracle中创建unique唯一约束(单列和多列)
  2. 最佳海报样机模板|让作品脱颖而出
  3. 决战双十一,促销海报设计模板,学习起来
  4. 万能广告促销海报,找不到灵感也不怕
  5. 超简单炫彩抽象线条感海报PSD分层素材,一切变得简单!
  6. 在PPT中,用好PNG图片素材,免抠才是王道
  7. mui获取php表格,Mui table实现数据提取方法
  8. 商务风格表格的设计与实现
  9. The netfilter.org project
  10. 【转】POSIX 是什么?让我们听听 Richard Stallman 的诠释 | Linux 中国