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;
    }
  • 相关阅读:
    InfoPath 发布表单到SharePoint库报错
    在log4net中控制nhibernate输出
    微信扫一扫(wx.scanQRCode)功能新手可能遇到的问题
    3.Zookeeper的安装和配置(集群模式)
    1.配置HDFS HA (高可用)
    2.Zookeeper工作原理(详细)
    1.Zookeeper 定义与工作原理
    js 获取元素的几种方法
    弹出层居中
    XUACompatible
  • 原文地址:https://www.cnblogs.com/JesseTsou/p/9537767.html
Copyright © 2011-2022 走看看