剑指Offe 50:数组中重复的数字
第一种方法:遍历一遍数组,依次放入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:数组中重复的数字相关推荐
- Python剑指offer:数组中重复的数字
题目一:找出数组中重复的数字 在一个长度为n的数组里的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字.例如 ...
- Leetcode 剑指 Offer 03. 数组中重复的数字 (每日一题 20210614)
找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复 ...
- 【三种解法实现】剑指 Offer 03. 数组中重复的数字
立志用最少的代码做最高效的表达 题目链接-->传送门 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数 ...
- leetcode 剑指 Offer 03. 数组中重复的数字
找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重 ...
- 【算法】剑指 Offer 03. 数组中重复的数字
1.概述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中 ...
- leetcode 剑指 Offer 03. 数组中重复的数字 抽屉原理 一个萝卜一个坑
找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重 ...
- 《剑指offer》数组中重复的数字
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7的 ...
- 剑指 Offer 03. 数组中重复的数字()
在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字. 解题思路 原 ...
- 剑指Offer之数组中重复的数字
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...
- 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)
文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...
最新文章
- MyEclipse安装SVN插件之超级精简法
- 12864输出字符c语言,大家看看该怎么改才能让12864液晶显示屏显示21个字符啊?...
- mysql 修复表和优化表
- asp.net WebForm页面间传值方法
- 优达学城数据分析笔记3--------数据分析过程(python篇)
- ubuntu java环境变量_hadoop:伪分布模式环境变量的配置
- @Component,@Bean
- 会员制营销系统_想提升门店经营水平?会员制营销法可以帮到你
- 第七篇,STM32串口通信编程
- Android 使用三种方式缓存加载 倒影图片
- 硬件相关技术资料分享
- 【重磅整理】提前看287篇ICLR-2021 深度强化学习领域论文得分汇总列表
- ERROR 1130 (HY000): Host XXX is not allowed to connect to this MySQL server
- 4.19黄金白银TD纸白银行情如何把握,最新行情策略
- 惠普DV2000 V3000笔记本散热不良温度过高简单改造见效降温
- html5页面自适应分辨率,H5+JS适配不同分辨率的页面
- 青松资讯:李逵遇李鬼,浅谈Android上的“冒牌货”恶意软件
- 逆向工程实验Lab3
- Linux下docker加速器的配置
- 新计算开创产业新格局
热门文章
- 居家学习python自制闹铃小助手
- 吐血分享:QQ群霸屏技术教程2017(活跃篇)
- impala添加kerberos认证
- mac地址修改_全球首款支持电脑名称和MAC地址修改的浏览器 VMLogin超级防关联指纹浏览器 同时支持模拟真人输入,支持自定义经纬度...
- idea使用docker-mave插件打包镜像并部署到harbor私服仓库
- STM32 CAN 库函数
- 跟着小马哥学系列之 Spring AOP(AbstractAutoProxyCreator 详解)
- 淘宝api接口系列,获取sku详细信息
- 单总线CPU微程序控制器设计
- cmd删除Windows凭据管理器