java一道算法题 有一个int数组,储存的数值范围在1至10000之间(不是10000以内的每一个数字都出现在数组中),数组本身没有排序,现在有一个数重复了,用最快的方法查出重复的数字。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用一个boolean flag[10000] = {false};数组记录访问情况,例如 若 找到10,那么flag[10] = true;遍历一遍,时间复杂度0(n);不知道会不会有比O(n) 更快的算法~希望大家继续加油思考,期待答案~ 用一个boolean flag[10000] = {false};数组记录访问情况,例如 若 找到10,那么flag[10] = true;遍历一遍,时间复杂度0(n);不知道会不会有比O(n) 更快的算法~希望大家继续加油思考,期待答案~ a[10000]给定的数组,b[10000]新建的全为零的数组for(int i = 0; i<10000; i++){ b[a[i]]++; if(b[a[i]]==2) System.out.println(a[i]);}这样只需要遍历10000个数就好了 不知怎样做能更快些 希望楼主能得到更好的答案 import java.util.Scanner;public class Main { // 1至10000之间 数组最长就1000 // 打表就OK了,每读一个数字就以该数字为下标存入数字 // 如果给空间已经存储就说明这个数字重复了 // 最好O(2), 最坏O(n), 平均 O(n/2) public static void main(String[] args) { boolean[] a = new boolean[1001]; // 输入器 Scanner scanner = new Scanner(System.in); int x; // 如果输入器有数据 while (scanner.hasNext()) { // 读取当前数据 x = scanner.nextInt(); // 如果是false,表示尚未使用该空间 // 则表示这个数没使用 if (!a[x]) { // 就使用该空间 a[x] = true; } else { // 否则是true就说明已经出现了该数 System.out.println(x + "重复"); break; } } }}// 1 2 3 4 5 6 7 8 9 10 1// 1重复 Java如何关闭ResultSet后,还能获得记录? 求安卓高手解决 String转成int就出错,不知道为什么,请大家帮忙。 java分页 子类和父类的关系,在线等 哪里有jdk1.3或 jdk1.4 的源代碼下. 收购 --- 任何 B/S结构的软件 请教一个关于JBuilder4的问题 java正则表达式匹配过程 Java 泛型 疑问 求高手解答 知道的过来看看。。。。。。 迭代时,当textarea中id="sub${question.id}"时候,如何通过js得到每个id
遍历一遍,时间复杂度0(n);不知道会不会有比O(n) 更快的算法~希望大家继续加油思考,期待答案~
遍历一遍,时间复杂度0(n);不知道会不会有比O(n) 更快的算法~希望大家继续加油思考,期待答案~
{
b[a[i]]++;
if(b[a[i]]==2) System.out.println(a[i]);
}
这样只需要遍历10000个数就好了 不知怎样做能更快些 希望楼主能得到更好的答案
// 1至10000之间 数组最长就1000
// 打表就OK了,每读一个数字就以该数字为下标存入数字
// 如果给空间已经存储就说明这个数字重复了
// 最好O(2), 最坏O(n), 平均 O(n/2)
public static void main(String[] args) { boolean[] a = new boolean[1001];
// 输入器
Scanner scanner = new Scanner(System.in);
int x;
// 如果输入器有数据
while (scanner.hasNext()) {
// 读取当前数据
x = scanner.nextInt();
// 如果是false,表示尚未使用该空间
// 则表示这个数没使用
if (!a[x]) {
// 就使用该空间
a[x] = true;
} else {
// 否则是true就说明已经出现了该数
System.out.println(x + "重复");
break;
}
}
}
}
// 1 2 3 4 5 6 7 8 9 10 1
// 1重复