Java 在数组中查找重复项

Java 在数组中查找重复项,java,arrays,Java,Arrays,给定介于1和n之间的n+1整数的只读数组,查找一个在线性时间内使用小于O(n)空间重复的数字,并按顺序遍历流O(1)次。如果有多个可能的答案,请输出任意一个 如果没有重复,则输出-1 输入:[3 4 1 4 1] 输出:1或4 为什么下面的代码不起作用 public int repeatedNumber(final List<Integer> a) { Collections.sort(a); for (int i = 0; i < a.size

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

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

输入:
[3 4 1 4 1]

输出:
1或4

为什么下面的代码不起作用

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;
    }
public int repeatedNumber(最终列表a){
收集.分类(a);
对于(int i=0;i
也许吧

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;
}
public int repeatedNumber(最终列表a){
收集.分类(a);
对于(int i=1;i
如果代码中使用的是Java,您将得到
索引越界
异常。其次,我将缓存大小

但对我来说,这就像是家庭作业。

所以有两件事:- 仅使用.size()而不是.size()-1

public static int repeatedNumber(最终列表a){
收集.分类(a);
对于(int i=0;i
无论如何,您不会得到4个输出,因为它在匹配“1”时返回(退出),因此不会到达列表中的4
您不会

,因为您没有在所有集合中迭代值进行比较。请不要要求审阅,也不要问为什么您的代码不起作用。这就是要求“我们”至少做你期望的事情。另外,请用特定的语言标记它。看起来您正在使用Java;添加它或正确的一个。我不认为我需要浏览整个列表,因为它已经排序了。如果任何整数重复自身,它们将位于相邻位置,代码将捕获它。对不起,我是新来的。“我只是不明白为什么这种方法不起作用。”Chieftwoils…还有nada,伙计。只是一个观察。关于这一点,meta上有很多讨论,因此不会再开始新的讨论。这段代码没有任何好处。你只是假设,没有理由假设。他们不知道你为什么在乎这是家庭作业,你似乎在为我们说话,而不是家庭作业。我正在研究求职面试的数据结构和算法,为此我挠头了一个小时左右。我认为我的逻辑是正确的,但测试用例并没有运行。@ChiefTwoPencils哈哈,到底是什么让你们认为我在为别人说话,而不是为我自己?这是一个修辞问题,如果你想回答。。。。不管怎样,晚安。@JatinGupta好的,对不起。我只需要返回一个重复的数字中的任何一个。我的代码总是返回最小的重复数。@JatinGupta那么,您为什么不尝试查看每次迭代的输出,并查看System.out.println(a.get(i)”:“a.get(i+1))@JatinGupta并输出列表以确保其已排序。只是一些方便的调试好的,谢谢,我会试试的。但是我又读了一遍问题语句,它说这个列表是只读的,所以我认为以任何方式修改它(包括排序)都是不可能的,这就是编译器显示错误的原因
   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));