码迷,mamicode.com
首页 > 其他好文 > 详细

【leetcode】219 Contains Duplicate2

时间:2018-08-26 18:37:46      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:return   容器   题目   ble   使用   .com   并且   返回   说明   

题目说明

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 containsNearbyDuplicate2(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 containsNearbyDuplicate3(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;
}

【leetcode】219 Contains Duplicate2

标签:return   容器   题目   ble   使用   .com   并且   返回   说明   

原文地址:https://www.cnblogs.com/JesseTsou/p/9537767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!