剑指offer:数组中重复的数字
来源:互联网 发布:pdf.js 打开 word文档 编辑:程序博客网 时间:2024/06/04 18:27
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。分析
因为找出任意一个重复的数字,所以排序,然后找出第一个跟后面的元素相等的元素输出就是返回结果。
当然,也有比较高端一点的,因为数组中所有的数字都在0-1的范围内,所以如果没有重复的数字的话,数组中的元素应该刚刚好为0~n-1,否则的话,我们对数组进行重排,对于元素numbers[i],如果numbers[i]==i,扫描下一个;否则,numbers[i]和numbers[numbers[i]]比较,如果相等,就找到了一个重复的数字,如果不等,交换numbers[i]和numbers[numbers[i]]的值,继续比较。(但是,我觉得这个比较麻烦没有必要这么做,而且容易超时)主要代码见代码2代码
bool duplicate(int numbers[], int length, int* duplication) { if(length==0) return false; else{ sort(numbers,numbers+length); for(int i=0;i<length-1;i++){ if(numbers[i]==numbers[i+1]){ *duplication=numbers[i]; return true; } } return false; } }};
- 代码2
bool duplicate(int numbers[], int length, int* duplication) { for(int i=0;i<length;i++){ while(number[i] == i){ if(numbers[i] == numbers[numbers[i]]){ *duplication = numbers[i]; return true; } int temo=numbers[i]; numbers[i] = numbers[numbers[i]]; numbers[numbers[i]]=temp; } } return false; }
阅读全文
0 0
- 剑指offer--数组中重复的数字
- 《剑指offer》数组中重复的数字
- 剑指offer:数组中重复的数字
- [剑指Offer]数组中重复的数字
- 剑指offer:数组中重复的数字
- 剑指offer 数组中重复的数字
- [剑指offer]数组中重复的数字
- 剑指offer|数组中重复的数字
- 剑指offer-数组中重复的数字
- 剑指offer 数组中重复的数字
- 《剑指offer》数组中重复的数字
- 剑指offer-数组中重复的数字
- 剑指offer--数组中重复的数字
- 剑指offer--数组中重复的数字
- 剑指offer:数组中重复的数字
- 剑指offer:数组中重复的数字
- 剑指offer:数组中重复的数字
- 【剑指offer】数组中重复的数字
- 329. Longest Increasing Path in a Matrix
- 【Scikit-Learn 中文文档】随机梯度下降
- 欢迎使用CSDN-markdown编辑器
- div 层基础知识
- RMQ模板题 poj3264 Balanced Lineup
- 剑指offer:数组中重复的数字
- 最大子段-n上找m个子段的和为最大-动态规划-二维dp+滚动数组dp优化
- 彻底剖析numpy的数值运算
- 模拟好题 CodeForces 864CBus
- C++文件操作与文件流学习
- 笔记
- 【Scikit-Learn 中文文档】最近邻
- <Java算法实现--LeetCode(4)(7)>2017-11-22
- Linux之Redhat中 Web端建立mysql数据库及论坛