数组中重复的数
来源:互联网 发布:手机商城模板php 编辑:程序博客网 时间:2024/04/29 06:54
题目描述
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
/*1、判断输入数组有无元素非法2、从头扫到尾,只要当前元素值与下标不同,就做一次判断,numbers[i]与numbers[numbers[i]],相等就认为找到了重复元素,返回true,否则就交换两者,继续循环。直到最后还没找到认为没找到重复元素,返回false*/class Solution {public: // Parameters: // numbers: an array of integers // length: the length of array numbers // duplication: (Output) the duplicated number in the array number // Return value: true if the input is valid, and there are some duplications in the array number // otherwise false bool duplicate(int numbers[], int length, int* duplication) { if(length<=0||numbers==NULL) return false; //判断每一个元素是否非法 for(int i=0;i<length;++i) { if(numbers[i]<=0||numbers[i]>length-1) return false; } for(int i=0;i<length;++i) { while(numbers[i]!=i) { if(numbers[i]==numbers[numbers[i]]) { *duplication = numbers[i]; return true; } //交换numbers[i]和numbers[numbers[i]] int temp = numbers[i]; numbers[i] = numbers[temp]; numbers[temp] = temp; } } return false; }};
代码中尽管有一个两重循环,但是每个数字最多只要交换两次就能找到属于他自己的位置,因此总的时间复杂度为O(N)。另外,所有的操作步骤都是在输入数组上进行的,不需要额外分配内存,因此空间复杂度为O(1)。
阅读全文
0 0
- 数组中重复的数
- 数组中重复的数
- 数组中重复的数
- 数组中重复的数
- 数组中重复的数
- 找出数组中重复的数
- 找出数组中唯一重复的数
- 数组中寻找重复的数
- 查找数组中重复的数
- 去除数组中重复的数
- 删除数组中重复的数
- 数组中重复元素最多的数
- 找出数组中重复的数
- 数组中重复次数最多的数
- 牛客网刷题之数组中重复的数
- js 去除数组中重复的的数
- 循环一次,找出数组中存在的所有重复数
- 找出一个数组中没重复出现过的数
- caffe源码阅读——SyncedMemory.cpp
- 数据结构C++小笔记《2017-10-06》
- docker镜像管理命令学习
- vmware12中ubuntu15 16的vmware tools失效,导致不能复制粘贴文件以及自动适应窗口分辨率
- 【模拟】hex 题解
- 数组中重复的数
- nyoj242计算球体积
- 五分钟学会使用spring-data-cassandra快速实现数据的访问
- x86的openwrt镜像遇到的问题
- [jzoj]3482. 【NOIP2013模拟10.23】轮舞前夕(经典树形DP)
- spring中classpath用法
- dockerfile 中静默安装mysql
- 575. Distribute Candies
- 将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt