滑動窗口系列-Leetcode 219. 存在重複元素 II

問題描述

給定一個整數數組和一個整數 k,判斷數組中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的 絕對值 至多爲 k。

示例 1:

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

解題報告

維持一個大小爲k的窗口,將窗口內的數放到集合中,一直檢查窗口內是否相同元素,如果存在就返回 true,否則返回 false

  • 移動右指針,檢查窗口內的元素放到集合中,檢查是否存在重複元素;
  • 如果窗口內的元素個數大於 k,移動左指針;
  • 移動左指針,將窗口移出的元素從集合中刪除;

實現代碼

class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        int l=0,r=0;
        set<int>s;
        while(r<nums.size()){
            if(r-l>k){
                s.erase(nums[l]);
                l++;
            }
            if(s.find(nums[r])!=s.end())return true;
            s.insert(nums[r++]);
        }
        return false;
    }
};

參考資料

[1] Leetcode 219. 存在重複元素 II

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章