Leetcode 219. 存在重复元素 II 思维 map

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k

示例 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

面试就挂在了这道题上。心痛啊。。。想到了优先队列,没想到用map啊。

用map来记录数值的索引,抽到相同元素来判断索引差值是否小于等于k。

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

猜你喜欢

转载自blog.csdn.net/Evildoer_llc/article/details/88544629