leetcode哈希表-存在重复元素 II

2022-07-26 11:05:31

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

示例 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


思路一:
判断是否存在两个,只要存在两个并且满足条件即返回true
使用哈希表遍历整个数组
先判断是否有重复的元素,如果有重复的元素返回true
在往哈希表中添加元素
如果超出窗口k 则删除k之前的元素

classSolution{publicbooleancontainsNearbyDuplicate(int[] nums,int k){
    Set<Integer> set=newHashSet<>();for(int i=0; i< nums.length;++i){if(set.contains(nums[i]))returntrue;
        set.add(nums[i]);if(set.size()> k){
            set.remove(nums[i- k]);}}returnfalse;}}

主次关系不要弄混
先判定是否有重复元素,在添加元素
如果添加元素后,又判断哈希表中有该元素,无论如何都会返回true


思路二:
用平衡二叉树的解决方法
定义一个Treeset

publicbooleancontainsNearbyDuplicate(int[] nums,int k){
    Set<Integer> set=newTreeSet<>();for(int i=0; i< nums.length;++i){if(set.contains(nums[i]))returntrue;
        set.add(nums[i]);if(set.size()> k){
            set.remove(nums[i- k]);}}returnfalse;}

结果显示定义超时,但思路想法是对的

  • 作者:码农研究僧
  • 原文链接:https://blog.csdn.net/weixin_47872288/article/details/117673010
    更新时间:2022-07-26 11:05:31