重複した要素が存在します (C++ ソリューション)

トピック

整数配列 nums と integer が与えられた場合、 と を  満たす 2 つの異なるインデックスの合計が配列 内にk 存在するかどうかを判断します  。存在する場合は return   、存在しない場合は return   。 i jnums[i] == nums[j]abs(i - j) <= ktruefalse

例 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を返します。条件が満たされない場合、ループが継続され、新しい連絡先が上書きされます。

おすすめ

転載: blog.csdn.net/m0_62275194/article/details/133963435