来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/contains-duplicate-ii/

描述

给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。

示例 1:
输入: nums = [1,2,3,1], k = 3
输出: true

示例 3:
输入: nums = [1,2,3,1,2,3], k = 2
输出: false

题解

  1. class Solution {
  2. public boolean containsNearbyDuplicate(int[] nums, int k) {
  3. Set<Integer> set = new HashSet<>();
  4. for (int i = 0; i < nums.length; i++) {
  5. if (set.contains(nums[i])) {
  6. return true;
  7. }
  8. set.add(nums[i]);
  9. if (set.size() > k) {
  10. set.remove(nums[i - k]);
  11. }
  12. }
  13. return false;
  14. }
  15. }

复杂度分析

  • 时间复杂度:219. 存在重复元素 II(Contains Duplicate II) - 图1219. 存在重复元素 II(Contains Duplicate II) - 图2次搜索,删除,插入操作,每次操作都耗费常数时间;
  • 空间复杂度:219. 存在重复元素 II(Contains Duplicate II) - 图3,开辟的额外空间取决于散列表中存储的元素的个数,也就是滑动窗口的大小;