class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
}
};
219. 存在重复元素 II
给你一个整数数组 nums
和一个整数 k
,判断数组中是否存在两个 不同的索引 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
提示:
1 <= nums.length <= 105
-109 <= nums[i] <= 109
0 <= k <= 105
原站题解
golang 解法, 执行用时: 124 ms, 内存消耗: 8.5 MB, 提交时间: 2023-09-27 15:18:00
func containsNearbyDuplicate(nums []int, k int) bool { n := len(nums) set := map[int]bool{} for i := 0; i < n; i++ { if i > k { set[nums[i - k - 1]] = false } if set[nums[i]] { return true } set[nums[i]] = true } return false }
python3 解法, 执行用时: 84 ms, 内存消耗: 25.1 MB, 提交时间: 2023-09-27 15:17:39
class Solution: def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool: n = len(nums) s = set() for i in range(n): if i > k: s.remove(nums[i - k - 1]) if nums[i] in s: return True s.add(nums[i]) return False
php 解法, 执行用时: 168 ms, 内存消耗: 29.9 MB, 提交时间: 2023-09-27 15:16:00
class Solution { /** * @param Integer[] $nums * @param Integer $k * @return Boolean */ function containsNearbyDuplicate($nums, $k) { $map = []; foreach($nums as $kk=>$vv){ if(isset($map[$vv]) && abs($kk-$map[$vv]) <= $k){ return true; } $map[$vv] = $kk; } return false; } }
javascript 解法, 执行用时: 92 ms, 内存消耗: 54.3 MB, 提交时间: 2023-09-27 15:15:17
/** * @param {number[]} nums * @param {number} k * @return {boolean} */ var containsNearbyDuplicate = function(nums, k) { const 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; };
java 解法, 执行用时: 22 ms, 内存消耗: 52.9 MB, 提交时间: 2023-09-27 15:15:00
class Solution { public boolean containsNearbyDuplicate(int[] nums, int k) { HashSet<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; } }
golang 解法, 执行用时: 988 ms, 内存消耗: 7.8 MB, 提交时间: 2021-06-25 15:24:27
func containsNearbyDuplicate(nums []int, k int) bool { n := len(nums) for i, num := range nums { for j := i+1; j <= i+k && j < n; j++ { if num == nums[j] { return true } } } return false }