剑指offer 37.数组中重复的数字

  1. 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
  2. 思路:
    1. 使用map统计数组里面的数字的个数
    2. 找出数组中任意一个重复的数字,遍历map如果发现个数大于1,则输出返回即可
  3. 启发或者坑
    1. 可能数组里没有重复的数字,返回false
  4. 代码
    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;
        }
    };
    
发布了131 篇原创文章 · 获赞 5 · 访问量 7389

猜你喜欢

转载自blog.csdn.net/Alexia23/article/details/103866687