首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在数组中查找重复项

在数组中查找重复项
EN

Stack Overflow用户
提问于 2018-05-29 08:56:54
回答 2查看 86关注 0票数 -1

给定一个介于1n之间的n + 1整数的只读数组,找到一个在线性时间内重复的数字,使用的空间小于O(n),并按O(1)次顺序遍历流。如果有多个可能的答案,则输出任何一个。

如果没有重复,则输出-1

输入:[3 4 1 4 1]

输出:1 or 4

为什么下面的代码不能工作?

代码语言:javascript
复制
public int repeatedNumber(final List<Integer> a) {
        Collections.sort(a);
        for (int i = 0; i < a.size() - 1; i++) {
            if (a.get(i) == a.get(i + 1)) {
                return a.get(i);
            }
        }
        return -1;
    }
EN

回答 2

Stack Overflow用户

发布于 2018-05-29 09:15:46

所以有两件事:-用.size()代替.size() -1

代码语言:javascript
复制
   public static int repeatedNumber(final List<Integer> a) {
    Collections.sort(a);
    for (int i = 0; i < a.size(); i++) {

        if (a.get(i) == a.get(i + 1)) {
            return a.get(i);
        }
    }
    return -1;
}
  Integer listy[] = {3,4,1,4,1 };

  List iyu = new ArrayList(Arrays.asList(listy));


  System.out.println(repeatedNumber(iyu));

你无论如何都不会得到4的输出,因为它在匹配"1“时返回(退出),所以在列表中不会达到4,你也不会

票数 0
EN

Stack Overflow用户

发布于 2018-05-29 09:04:00

也许吧

代码语言:javascript
复制
public int repeatedNumber(final List<Integer> a) {
    Collections.sort(a);
    for (int i = 1; i < a.size(); i++) {
        if (a.get(i) == a.get(i - 1)) {
            return a.get(i);
        }
    }
    return -1;
}

如果你的代码是Java,你会得到Index out of bounds异常。其次,我将缓存大小。

不过在我看来像是家庭作业。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50574956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档