给定一个介于1
和n
之间的n + 1
整数的只读数组,找到一个在线性时间内重复的数字,使用的空间小于O(n)
,并按O(1)
次顺序遍历流。如果有多个可能的答案,则输出任何一个。
如果没有重复,则输出-1
输入:[3 4 1 4 1]
输出:1 or 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;
}
发布于 2018-05-29 09:15:46
所以有两件事:-用.size()代替.size() -1
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,你也不会
发布于 2018-05-29 09:04:00
也许吧
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
异常。其次,我将缓存大小。
不过在我看来像是家庭作业。
https://stackoverflow.com/questions/50574956
复制相似问题