一个数组中找重复数
2015-11-25 17:10
405 查看
一个大小为n的数组,里面的数都属于范围[0, n-1],有不确定的重复元素,找到至少一个重复元素,要求O(1)空间和O(n)时间。
#include <stdio.h> const int NO_REPEAT_FLAG = -1; int FindRepeatNumberInArray(int *a, int n) { for(int i = 0; i < n; i++) { int nRealIndex = a[i] >= n ? a[i] - n : a[i]; if (a[nRealIndex] >= n) //这个位置上的值大于n说明已经是第二次访问这个位置了 return nRealIndex; else a[nRealIndex] += n; } return NO_REPEAT_FLAG; //数组中没有重复的数 } void PrintfArray(int a[], int n) { for (int i = 0; i < n; i++) printf("%d ", a[i]); putchar('\n'); } int main() { const int MAXN = 10; //int a[MAXN] = {2, 4, 1, 5, 7, 6, 1, 9, 0, 2}; int a[MAXN] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 0}; printf("数组为: \n"); PrintfArray(a, MAXN); int nRepeatNumber = FindRepeatNumberInArray(a, MAXN); if (nRepeatNumber != NO_REPEAT_FLAG) printf("该数组有重复元素,此元素为%d\n", nRepeatNumber); else printf("该数组没有重复元素\n"); return 0; }
相关文章推荐
- 1-2-05:填空:类型转换2
- 1072. Gas Station (30)
- 算法实验一 菲薄拉起数列
- Gost hash的C源码
- APP中注册时常用的发送验证码的Button,带倒计时重发功能
- clojure实现java类
- 关于COCOS2d-X中截图素材局部的Rect参数
- mysql 体系结构以及各种文件类型学习汇总
- CSS+DIV常用命名
- 模拟实现strncat
- 见闻下
- 网页设计大赛第九天
- Qt翻译---补充
- 高仿饿了么订餐界面
- 让并发和容错更容易:Akka示例教程
- Hadoop教程(二)Hadoop伪集群环境安装
- 【codevs1028】花店橱窗布置 费用流(dinic)
- java导出Excel表格
- bootstrap历练实例: 导航元素中禁用的链接
- java动态代理