要求
- 给出整型数组nums和整数k,是否存在索引i和j,nums[i]==nums[j],且i和j之间的差不超过k
思路
- 暴力解法(n2)
- 建立最长为k+1的滑动窗口,用set查找窗口中是否有重复元素,若没有则向后滑动(时间n,空间k)
- 并不存在滑动窗口的实体,通过维护set中的元素实现
- 代入具体例子确定边界
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 };
相关
- 217 Contains Duplicate