[LeetCode] 219. Contains Duplicate II

来源:互联网 发布:php在线做题系统 编辑:程序博客网 时间:2024/05/22 17:39

Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k.

  • 判断是否存在两个相等的数,且|i - j| < k
  • set容器的使用
  • 类似于一个大小为k的窗口,每次窗口右移,删除set中窗口外的值
#include <stdio.h>#include <vector>#include <set>using namespace std;class Solution {public:    bool containsNearbyDuplicate(vector<int>& nums, int k) {        if (k <= 0)            return false;        set<int> s;        for (int i = 0; i < nums.size(); i++){            if (i > k)                s.erase(nums[i - k - 1]);            if (!s.insert(nums[i]).second)                return true;        }        return false;    }};int main(){    Solution solution;    vector<int> nums = {1,2,1};    if (solution.containsNearbyDuplicate(nums, 1))        printf("true\n");    else        printf("false\n");    return 0;}