219. Contains Duplicate II
選択した UI 言語に合わせて問題文をロシア語から翻訳します。コードは変更しません。
Дан 配列 целых чисел nums и 整数 k. return true, если в 配列е существуют два различных индекса i и j, такие что nums[i] == nums[j] и abs(i - j) <= k.
例:
Input: nums = [1,2,3,1,2,3], k = 2
Output: false
C# 解法
照合済み/オリジナルpublic class Solution {
public bool ContainsNearbyDuplicate(int[] nums, int k) {
HashSet<int> set = new HashSet<int>();
for (int i = 0; i < nums.Length; ++i) {
if (set.Contains(nums[i])) return true;
set.Add(nums[i]);
if (set.Count > k) set.Remove(nums[i - k]);
}
return false;
}
}
C++ 解法
自動ドラフト、提出前に確認#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public bool ContainsNearbyDuplicate(vector<int>& nums, int k) {
HashSet<int> set = new HashSet<int>();
for (int i = 0; i < nums.size(); ++i) {
if (set.Contains(nums[i])) return true;
set.push_back(nums[i]);
if (set.size() > k) set.Remove(nums[i - k]);
}
return false;
}
}
Java 解法
照合済み/オリジナルpublic boolean containsNearbyDuplicate(int[] nums, int k) {
Set<Integer> set = new HashSet<>();
for (int i = 0; i < nums.length; ++i) {
if (set.contains(nums[i])) return true;
set.add(nums[i]);
if (set.size() > k) {
set.remove(nums[i - k]);
}
}
return false;
}
JavaScript 解法
照合済み/オリジナルvar containsNearbyDuplicate = function(nums, k) {
let set = new Set();
for (let i = 0; i < nums.length; ++i) {
if (set.has(nums[i])) return true;
set.add(nums[i]);
if (set.size > k) set.delete(nums[i - k]);
}
return false;
};
Python 解法
照合済み/オリジナルclass Solution:
def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
seen = set()
for i, num in enumerate(nums):
if num in seen:
return True
seen.add(num)
if len(seen) > k:
seen.remove(nums[i - k])
return False
Go 解法
照合済み/オリジナルfunc containsNearbyDuplicate(nums []int, k int) bool {
set := make(map[int]struct{})
for i, num := range nums {
if _, exists := set[num]; exists {
return true
}
set[num] = struct{}{}
if len(set) > k {
delete(set, nums[i-k])
}
}
return false
}
Algorithm
1️⃣
Создайте пустое множество set.
2️⃣
Пройдитесь по 配列у nums:
Если текущий element уже есть в множестве, return true.
Добавьте текущий element в множество.
Если размер множества больше k, удалите element, который был добавлен k шагов назад.
3️⃣
Если не найдены дублирующиеся elementы на расстоянии k или менее, return false.
😎
Vacancies for this task
有効な求人 with overlapping task tags are 表示.
有効な求人はまだありません。