zoukankan      html  css  js  c++  java
  • 【leetcode】219 Contains Duplicate2

    题目说明

    https://leetcode-cn.com/problems/contains-duplicate-ii/description/
    给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。

    解法1

    /*
     * 时间复杂度:O(n)
     * 使用unordered_set保存滑动窗口(长度[0,k])
     */
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_set<int> set1;
    
        for(int i = 0; i <nums.size(); i ++)
        {
            //有重复则返回
            if (set1.find(nums[i]) != set1.end())
                return true;
            //无重复则保存到set
            set1.insert(nums[i]);
            //set长度大于k,则需要移除前方的
            if (set1.size() > k){
                set1.erase(nums[i - k]);
            }
        }
        return false;
    }
    

    解法2

    /*
     * 时间复杂度:O(n)
     * 使用unordered_map保存数组值,以及对应的下标容器
     */
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int,vector<int>> map1;
    
        for (int i = 0; i < nums.size(); i ++) {
            map1[nums[i]].push_back(i);
        }
    
        for (unordered_map<int,vector<int>>::iterator iter = map1.begin(); iter != map1.end(); iter ++) {
            if (iter->second.size() >=2){
                //对容器进行排序
                sort(iter->second.begin(), iter->second.end());
                //遍历容器
                for (int i = 0; i < iter->second.size() - 1; i ++) {
                    //若相邻的下标小于k,则满足条件
                    if (iter->second[i+1] - iter->second[i] <= k )
                        return true;
                }
            }
        }
        return false;
    }
    

    解法3

    /*
     * 时间复杂度:O(n)
     * 使用unordered_map保存数组值,以及对应的下标(最后匹配的下标)
     */
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int,int> map1;
    
        for (int i = 0; i < nums.size(); i ++) {
            auto temp = map1.find(nums[i]);
            if (temp != map1.end()){
                if (i - temp->second <= k)
                    return true;
            }
            map1[nums[i]]=i;
        }
    
        return false;
    }
  • 相关阅读:
    天梯赛
    CF#715 div2
    「Solution」C++ 循环结构 阶乘问题
    「ASCII Art」字符画黑人抬棺
    「Solution」P5759 [NOI1997]竞赛排名
    miller_rabin判断质数logn
    Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2) A B C 题解
    Codeforces Round #717 (Div. 2) A B C 题解
    redis php常用操作
    php7 操作MongoDB
  • 原文地址:https://www.cnblogs.com/JesseTsou/p/9537767.html
Copyright © 2011-2022 走看看