题目描述

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
 
思路:
这道题是做过的,但是时间久了,忘记了....
自己读题也不仔细,没注意到数字都在0-n-1范围内....
 
首先,上最好的方法吧。O(N)时间+O(1)空间的
思路是:把数组中的下标和数字对应起来,举例,让numbers[0]中的数字是0,让numbers[1]中的数字是1....
如果说下标已经和数字对应了,又找到了相同的数字就是出现了重复。
由于每个数字只会归位一次,所以是O(N)的算法。
bool duplicate3(int numbers[], int length, int* duplication)
{
if(numbers == NULL) return false;
for(int i = ; i < length; i++)
{
while(numbers[i] != i) //当前位与数字不匹配
{
if(numbers[i] == numbers[numbers[i]])
{
duplication[] = numbers[i];
return true;
}
else //把当前位存储的数字放入正确的位置
{
swap(numbers[i], numbers[numbers[i]]);
}
}
}
return false;
}

用hashtable的方法 时间O(N)空间O(N)

bool duplicate(int numbers[], int length, int* duplication) {
unordered_set<int> us;
for(int i = ; i < length; i++)
{
if(us.find(numbers[i]) == us.end())
{
us.insert(numbers[i]);
}
else
{
duplication[] = numbers[i];
return true;
}
}
return false;
}

排序的方法

static int cmp(const void *a, const void * b)
{
return *(int *)a - *(int *)b;
}
bool duplicate2(int numbers[], int length, int* duplication) {
qsort(numbers, length, sizeof(int), cmp);
for(int i = ; i < length; i++)
{
if(numbers[i] == numbers[i - ])
{
duplication[] = numbers[i];
return true;
}
}
return false;
}

最新文章

  1. [LeetCode] Decode Ways 解码方法
  2. Python递归及斐波那契数列
  3. Bootstrap &lt;基础二十五&gt;警告(Alerts)
  4. Windows下解压版mysql的安装方法
  5. Python 开发与测试 Webservice(SOAP)
  6. pandas入门
  7. Swift-09-可空链式调用(Optional Chaining)
  8. ThinkPHP中的模型
  9. 15个带示例的jQuery滚动条插件
  10. MYSQL死锁
  11. 想挑战AlphaGO吗?先和PostgreSQL玩一玩?? PostgreSQL与人工智能(AI)
  12. C++ —— 库函数的 语法解析
  13. TestNG使用Eclipse建立Test Case - 就是爱Java
  14. Smarty模版
  15. js的几种简单排序算法及其效率实测
  16. ajax如何渲染数据
  17. word之常用功能
  18. elasticsearch mysql logstash 同步 简单配置【环境centos7 elasticsearch 6.0 mysql 5.7 logstash 6.0】
  19. matlab toolboxes 大全
  20. Jmeter-Maven-Plugin高级应用:Remote Server Configuration

热门文章

  1. 引用 Reference
  2. 笔记-网络-抓包-wireshark
  3. 《鸟哥的Linux私房菜》学习笔记(6)——管道及IO重定向
  4. Linux下 导入导出数据库
  5. [原]sencha touch之carousel
  6. Java学习5之接口
  7. java课堂 笔记
  8. 如何删除本地docker images镜像
  9. POJ--2823--Sliding Window----单调队列问题
  10. POJ 2376:Cleaning Shifts(贪心)