- 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
- 思路:
- 使用map统计数组里面的数字的个数
- 找出数组中任意一个重复的数字,遍历map如果发现个数大于1,则输出返回即可
- 启发或者坑
- 可能数组里没有重复的数字,返回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) { map<int, int> mark; map<int, int>::iterator it; for(int i = 0; i < length; i++) { it = mark.find(numbers[i]); if (it == mark.end()) { mark.insert(pair<int, int>(numbers[i], 1)); } else { mark[numbers[i]]++; } } int index = 0; for (it = mark.begin(); it != mark.end(); it++) { if (it->second > 1){ duplication[index] = it->first; index++; return true; } } if (index == 0) return false; else return true; } };
剑指offer 37.数组中重复的数字
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/103866687
今日推荐
周排行