51 数组中重复的数字
Posted 我是王小北
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51 数组中重复的数字相关的知识,希望对你有一定的参考价值。
哈希
时间On 空间On
bool duplicate(int numbers[], int length, int* duplication) { unordered_map<int, int> count; for (int i = 0; i < length; i++) count[numbers[i]]++; unordered_map<int, int>::iterator ite = count.begin(); while (ite != count.end()) { if (ite->second != 1) { *duplication = ite->first; return true; } ite++; } return false; }
方法二
时间On空间O1
bool duplicate(int numbers[], int length, int* duplication) { if (numbers == NULL || length <= 0) retrun 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; } swap(numbers[i], numbers[numbers[i]]); //放到该放的位置 } } return false; }
以上是关于51 数组中重复的数字的主要内容,如果未能解决你的问题,请参考以下文章