请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

219 list替换Set

public static boolean containsNearbyDuplicate2(int[] nums, int k) {


        //遍历nums中范围的值 这里用list 删除元素会错乱
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            int num = nums[i];
            if (set.contains(num)) {
                return true;
            }
            set.add(num);
            if (set.size() == k + 1) {
                set.remove(nums[i-k]);
            }
        }
        return false;
    }

老师 我用list发下这个解法就是错的,我debug打印几次list发现 list.remove 当E是Integer时 他不知道时删除元素还是删除索引,所以会错乱,但是我这里还是有点怀疑,list顺序添加 可以顺序取出的吧? 这个问题不能用list的原因是因为 remove这个方法的原因吗?

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2020-04-15 12:00:02

抱歉,我没有理解你的问题。这是 Leetcode 几号问题?你的错误代码是上面的代码吗?

0 回复 有任何疑惑可以回复我~
  • 提问者 慕妹2978617 #1
    标题写了。哈哈可能老师没注意219号。解题是正确的。我想set换list但是不知道为什么不可以
    回复 有任何疑惑可以回复我~ 2020-04-15 12:03:19
  • liuyubobobo 回复 提问者 慕妹2978617 #2
    明白了。set.remove(x) 的意思是从 set 中删除掉 x 这个元素;但是 list.remove(x) 的意思是删除掉 x 索引所在的元素。二者的参数意思是不一样的。
    回复 有任何疑惑可以回复我~ 2020-04-15 12:06:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信