力扣219.存在重复元素Ⅱ

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。

示例 1:

输入:nums = [1,2,3,1], k = 3
输出:true

示例 2:

输入:nums = [1,0,1,1], k = 1
输出:true

示例 3:

输入:nums = [1,2,3,1,2,3], k = 2
输出:false

提示:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • 0 <= k <= 10
class Solution {
public:
    bool containsNearbyDuplicate(vector& nums, int k) {
        //定义一个dictionary
        unordered_map dictionary;
        //定义了一个整型变量length把nums的大小赋值给length
        int length = nums.size();
        //遍历nums中的每一个元素
        for (int i = 0; i < length; i++) {
            //将nums中索引为i的值赋值给num
            int num = nums[i];
//判断dictionary中是否存在键为num的元素,如果存在并且当前元素的索引i与之前出现的该元素的索引的差值小于等于k就满足了两个距离不超过k的重复元素的条件。
//count统计指定键在unordered中出现的次数
            if (dictionary.count(num) && i - dictionary[num] <= k) {
                return true;
            }
            //记录每一个元素最后一次出现的索引位置
            dictionary[num] = i;
        }
        return false;
    }
};

 

你可能感兴趣的:(leetcode,算法,数据结构)