第一种方法:遍历一遍数组,依次放入hash表。一旦遇到一个元素哈希表中已经有了,就是第一个重复的数字。

class Solution {
public:bool duplicate(int numbers[], int length, int* duplication) {if(numbers == nullptr || length<=0 || duplication == nullptr) return false;unordered_map<int, int> map;for(int i=0; i<length; i++){if(map.count(numbers[i]) == 0){map.insert(make_pair(numbers[i], 1));}else{*duplication = numbers[i];return true;}}return false;}
};

同样使用哈希表,另一种写法可扩展性更强,稍加修改就可以返回所有的/任意位置的重复数字。

class Solution {
public:bool duplicate(int numbers[], int length, int* duplication) {if(numbers == nullptr || length<=0 || duplication == nullptr) return false;unordered_map<int, int> map;for(int i=0; i<length; i++) {map[numbers[i]]++;}int count = 0;for(int i=0; i<length; i++) {if(map[numbers[i]] > 1) {duplication[count++] = numbers[i];return true;}}return false;}
};

第二种方法:剑指Offer书上的解法,每个数字最多交换两次就能够找到属于自己的位置

class Solution {
public:bool duplicate(int numbers[], int length, int* duplication) {if(numbers == nullptr || length<=0 || duplication == nullptr) return false;for(int i=0; i<length; i++) {if(numbers[i] != i) {if( numbers[i] == numbers[numbers[i]] ) {*duplication = numbers[i];return true;}else{int tmp = numbers[i];numbers[i] = numbers[tmp];numbers[tmp] = tmp;}}}return false;}
};

剑指Offe 50:数组中重复的数字相关推荐

  1. Python剑指offer:数组中重复的数字

    题目一:找出数组中重复的数字 在一个长度为n的数组里的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字.例如 ...

  2. Leetcode 剑指 Offer 03. 数组中重复的数字 (每日一题 20210614)

    找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复 ...

  3. 【三种解法实现】剑指 Offer 03. 数组中重复的数字

    立志用最少的代码做最高效的表达 题目链接-->传送门 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数 ...

  4. leetcode 剑指 Offer 03. 数组中重复的数字

    找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重 ...

  5. 【算法】剑指 Offer 03. 数组中重复的数字

    1.概述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...

  6. leetcode 剑指 Offer 03. 数组中重复的数字 抽屉原理 一个萝卜一个坑

    找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重 ...

  7. 《剑指offer》数组中重复的数字

    题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7的 ...

  8. 剑指 Offer 03. 数组中重复的数字()

    在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字. 解题思路 原 ...

  9. 剑指Offer之数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  10. 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...

最新文章

  1. MyEclipse安装SVN插件之超级精简法
  2. 12864输出字符c语言,大家看看该怎么改才能让12864液晶显示屏显示21个字符啊?...
  3. mysql 修复表和优化表
  4. asp.net WebForm页面间传值方法
  5. 优达学城数据分析笔记3--------数据分析过程(python篇)
  6. ubuntu java环境变量_hadoop:伪分布模式环境变量的配置
  7. @Component,@Bean
  8. 会员制营销系统_想提升门店经营水平?会员制营销法可以帮到你
  9. 第七篇,STM32串口通信编程
  10. Android 使用三种方式缓存加载 倒影图片
  11. 硬件相关技术资料分享
  12. 【重磅整理】提前看287篇ICLR-2021 深度强化学习领域论文得分汇总列表
  13. ERROR 1130 (HY000): Host XXX is not allowed to connect to this MySQL server
  14. 4.19黄金白银TD纸白银行情如何把握,最新行情策略
  15. 惠普DV2000 V3000笔记本散热不良温度过高简单改造见效降温
  16. html5页面自适应分辨率,H5+JS适配不同分辨率的页面
  17. 青松资讯:李逵遇李鬼,浅谈Android上的“冒牌货”恶意软件
  18. 逆向工程实验Lab3
  19. Linux下docker加速器的配置
  20. 新计算开创产业新格局

热门文章

  1. 居家学习python自制闹铃小助手
  2. 吐血分享:QQ群霸屏技术教程2017(活跃篇)
  3. impala添加kerberos认证
  4. mac地址修改_全球首款支持电脑名称和MAC地址修改的浏览器 VMLogin超级防关联指纹浏览器 同时支持模拟真人输入,支持自定义经纬度...
  5. idea使用docker-mave插件打包镜像并部署到harbor私服仓库
  6. STM32 CAN 库函数
  7. 跟着小马哥学系列之 Spring AOP(AbstractAutoProxyCreator 详解)
  8. 淘宝api接口系列,获取sku详细信息
  9. 单总线CPU微程序控制器设计
  10. cmd删除Windows凭据管理器