問題の説明:
整数配列と整数所与 Kが決定され、アレイ内の2つの異なるインデックスがある場合、 I 及び Jは、例えばその NUMS [I] = NUMS [J] 、およびI及びJの 差の絶対値の最大値K。
例1:
入力: NUMS = [1,2,3,1]、K = 3。 出力: trueに
例2:
入力: NUMS = [1,0,1,1]、K = 1つの。 出力: trueに
例3:
入力: NUMS = [1,2,3,1,2,3]、K = 2 出力: falseに
基本的な考え方:
ウィンドウ+ハッシュセットをスライドさせるアイデアを使用します。
スライディングウィンドウを開始する場合には完全に、特別な決意を確立しません。
完了の場合、要素を削除して挿入していき、確立されています。重複があるかどうかを確認するには。
ACコード:
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
int i = 0, j = 0;
set<int> s;
while (j != nums.size()) {
if (s.size() != k + 1) { // 处理刚开始的情况
if (s.count(nums[j])) { // 刚开始就有重复元素的情况
return true;
} else {
s.insert(nums[j++]);
}
} else { // 滑动窗口已经建立的情况下
s.erase(nums[i++]);
if (s.count(nums[j])) {
return true;
} else {
s.insert(nums[j++]);
}
}
}
return false;
}
};