lc_219

0 阅读1分钟

[](219. 存在重复元素 II - 力扣(LeetCode))

标签:滑动窗口+unordered_set(无序、去重)

代码

(初始版):

bool containsNearbyDuplicate(vector<int>& nums, int k) {
    unordered_set<int>s;
    int t=nums.size();
    if(t==1){return false;}
    for(int i=0; i<=min(k,t-1); i++){
    	if(s.find(nums[i])==s.end()){
    		s.insert(nums[i]);
		}
		else{
			return true;
		}
	}
	for(int i=0,j=k+1;j<t;j++){
		s.erase(nums[i++]);
		if(s.find(nums[j])==s.end()){
			s.insert(nums[j]);
		}
		else{
			return true;
		}
	}
	return false;
}

(简洁版):

bool containsNearbyDuplicate(vector<int>& nums, int k) {
	int t=nums.size();
	unordered_set<int>s;
	for(int i=0; i<t; i++){
        if(s.count(nums[i])&&s.size()<=k){return true;}
        if(s.size()==k+1){
            s.erase(nums[i-k-1]);
        }
        if(s.count(nums[i])){return true;}
        s.insert(nums[i]);
	}
	return false;
}

复杂度: O(n)