首页 > 其他 > 详细

219.Contains Duplicate II

时间:2020-05-11 21:20:50      阅读:40      评论:0      收藏:0      [点我收藏+]

给定一个数组,以及一个整数k,判断数组中,是否存在相同的2个数,且这两个数的距离不超过k。
Input: nums = [1,2,3,1], k = 3
Output: true

Input: nums = [1,2,3,1,2,3], k = 2
Output: false

思路:
一:暴力搜索,提交OJ,显示运行超时

bool containsNearbyDuplicate(vector<int>& nums, int k) {
    for (int i = 0; i < nums.size(); i++) {
        for (int j = 1; j <= k && (i+j) < nums.size(); j++) {
            if (nums[i] == nums[i + j]) return true;
        }
    }
    return false;
}

二、运用哈希字典保存数组中的元素,key = nums[ i] , value = i. 当哈希字典中存在元素时,用现在的i-nums[i]得到两个下标的差,判断其是否小于等于k,提交OJ,能AC。

bool containsNearbyDuplicate(vector<int>& nums, int k) {
    unordered_map<int, int> map;
    for (int i = 0; i < nums.size(); i++) {
        if (map.count(nums[i]) && i - map[nums[i]] <= k) return true;
        map[nums[i]] = i;
    }
    return false;
}

 

219.Contains Duplicate II

原文:https://www.cnblogs.com/luo-c/p/12871199.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!