要求

  • 给出整型数组nums和整数k,是否存在索引i和j,nums[i]==nums[j],且i和j之间的差不超过k

思路

  • 暴力解法(n2)
  • 建立最长为k+1的滑动窗口,用set查找窗口中是否有重复元素,若没有则向后滑动(时间n,空间k)
  • 并不存在滑动窗口的实体,通过维护set中的元素实现
  • 代入具体例子确定边界

[刷题] 219 Contains Duplicate II_重复元素

[刷题] 219 Contains Duplicate II_数组_02[刷题] 219 Contains Duplicate II_整型_03
 1 class Solution {
 2 public:
 3     bool containsNearbyDuplicate(vector<int>& nums, int k) {
 4         
 5         unordered_set<int> record;
 6         for( int i ; i < nums.size() ; i ++ ){
 7             if( record.find(nums[i]) != record.end() )
 8                 return true;
 9             record.insert( nums[i] );
10             
11             // 保持record中最多有k个元素 
12             if( record.size() == k+1 )
13                 record.erase( nums[i-k] );
14         }
15         return false; 
16     }
17 };
View Code

相关

  • 217 Contains Duplicate