トピック
整数配列 nums
と integer が与えられた場合、 と を 満たす 2 つの異なるインデックスの合計が配列 内にk
存在するかどうかを判断します 。存在する場合は return 、存在しない場合は return 。 i
j
nums[i] == nums[j]
abs(i - j) <= k
true
false
例 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
C++ コード
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
/*
* 重复元素问题
* 将数组元素与其索引建立联系,放入哈希表中
* 如果满足有相同元素并且索引之差的绝对值小于等于k,返回true
*/
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_map<int, int> dictionary;
int len = nums.size();
for (int i = 0; i < len; ++i) {
int num = nums[i];
if (dictionary.count(num) && i - dictionary[num] <= k) {
return true;
}
dictionary[num] = 1;
}
return false;
}
int main() {
vector<int> nums = { 1,0,1,1 };
int k = 1;
bool ans = containsNearbyDuplicate(nums, k);
cout << boolalpha << ans << endl;
return 0;
}
分析する
要素の繰り返しの問題では、配列の要素とそのインデックスを対応付けてハッシュテーブルに入れ、同じ要素があり、インデックスの差の絶対値がk以下の場合にtrueを返します。条件が満たされない場合、ループが継続され、新しい連絡先が上書きされます。