zoukankan      html  css  js  c++  java
  • 面试题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;
    }
  • 相关阅读:
    HDU 1540 Tunnel Warfare (线段树区间合并)
    P2258 子矩阵
    P5021 赛道修建
    P4084 [USACO17DEC]Barn Painting
    P3914 染色计数
    比赛用模板
    P3594 [POI2015]WIL-Wilcze doły
    P5022 旅行
    P3952 时间复杂度
    P3960 列队
  • 原文地址:https://www.cnblogs.com/raichen/p/5851213.html
Copyright © 2011-2022 走看看