LeetCode刷题(181)~存在重复元素 II【unordered

    科技2022-07-21  105

    题目描述

    给定一个整数数组和一个整数 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

    解答 By 海轰

    提交代码(暴力:超时)

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

    运行结果 提交代码(使用unordered_set 维持一个滑动窗口)

    bool containsNearbyDuplicate(vector<int>& nums, int k) { unordered_set<int> s; for(int i=0;i<nums.size();++i){ if(s.find(nums[i])!=s.end()){ return true; } s.insert(nums[i]); if(s.size()>k){ s.erase(nums[i-k]);// 注意这里是删除nums[i-k] 不是s.begin() } } return false; }

    运行结果

    题目来源

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/contains-duplicate-ii

    海轰Pro 认证博客专家 C/C 微信小程序 微信小程序:「海轰Pro」微信公众号:「海轰Pro」知乎:「海轰Pro」微博:「海轰Pro」
    Processed: 0.010, SQL: 8