219. 存在重复元素II

暴力解法

class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {

        for (int i = 0; i < nums.length; i++) {

            for (int j = i + 1; j < nums.length && j - i <= k; j++) {
                
                if (nums[i] == nums[j]){
                    return true;
                }
            }
        }
        
        return false;
    }
}

/**
 * 时间复杂度 O(nk)
 * 空间复杂度 O(1)
 */

哈希表

import java.util.HashSet;

class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {

        /**
         * 滑动窗口
         * 用set存储元素,最多存储k个元素,当在k的范围内出现重复元素时返回true,否则删除存储的第一个元素才能继续存储
         */
        HashSet<Object> 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;
    }
}

/**
 * 时间复杂度 O(n)
 * 空间复杂度 O(1)
 */

https://leetcode-cn.com/problems/contains-duplicate-ii/

posted @ 2021-11-29 14:32  振袖秋枫问红叶  阅读(49)  评论(0)    收藏  举报