zoukankan      html  css  js  c++  java
  • 剑指 Offer 03. 数组中重复的数字 哈希

    地址 https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/

    找出数组中重复的数字。
    
    在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
    
    示例 1:
    输入:
    [2, 3, 1, 0, 2, 5, 3]
    输出:23 
     
    
    限制:
    2 <= n <= 100000

    解答:

    算法1  直觉上直接排序 然后遍历查看i和i+1是否相同

    时间复杂度 O(nlogn)

    class Solution {
    public:
        int findRepeatNumber(vector<int>& nums) {
            sort(nums.begin(),nums.end());
            //注意边界
            for(int i =0; i<nums.size()-1;i++){
                if(nums[i]==nums[i+1]) return nums[i];
            }
            //不可能得达这里
            return -1;
        }
    };

    算法2 开个map或者set进行记录已经搜索到的数字 遍历数组查询是否有相同的数字已经存在,如果存在则说明该数字重复了。(小技巧:开数组进行哈希更快)

    由于不必排序 哈希的复杂度为O(1)

    整体时间复杂度 O(n)

    class Solution {
    public:
        int arr[100010];
        int findRepeatNumber(vector<int>& nums) {
            for(auto& e:nums){
                if(arr[e]!=0) return e;
                else arr[e]=1;
            }
            
            return -1;
        }
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    NOI2021游记-记最后一段日子
    7.20 ZROI-Day7模拟赛
    7.19 ZROI-Day6模拟赛
    7.18 ZROI-Day5模拟赛
    7.17 ZROI-Day4模拟赛
    7.16 ZROI-DAY3 模拟赛
    7.15 ZROI-DAY2 模拟赛
    7.13 ZROI-DAY1赛后总结
    7.9模拟赛赛后总结
    7.7模拟赛赛后总结
  • 原文地址:https://www.cnblogs.com/itdef/p/14381583.html
Copyright © 2011-2022 走看看