leetcode-219-contains duplicate ii

Problem Description:

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 difference between i and j is at most k.

题目大意:

给定一个数组和一个数字N,求数组里又没有间隔N以下的相等值。

Solutions:

维护一个大小为K的滑动窗口,只需要O(n)的时间即可。注意K大于数组容量的情况。

Code in C++:

class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        if(nums.empty()||k<1) return false;
        set<int> s;
        if(k>nums.size())
        {
            for(int i=0;i<nums.size();i++){
                if(s.find(nums[i])!=s.end())
                return true;
                else
                s.insert(nums[i]);

            }
              return false;  
        }
        else
        {
            for(int i=0;i<k;i++)
            {
                if(s.find(nums[i])!=s.end())
                return true;
                else
                s.insert(nums[i]);
            }
            for(int j=k;j<nums.size();j++)
            {

                if(s.find(nums[j])!=s.end())
                return true;
                else{
                s.insert(nums[j]);
                s.erase(nums[j-k]);
                }
            }
            return false;
        }


    }
};