题目是: 有1~100的数字,每次输出的数据都是随机的不能重复,时间复杂度在O(n).
解答:
这里是反向循环开始
public static int N = 100;
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= N; i++) {
list.add(i);
}
int size = list.size();
int count = 0;
for (int j = size; j > 0; j--) {
int index = new Random().nextInt(j);
int value = list.get(index);
System.out.println("随机位置:" + index + "--对应的数据:" + value + "--当前循环次数:" + count);
list.remove(index);
count++;
}
}
上述代码可以正确运行完成。
image.png
但是如果按照下面的写法是会报错的, 这里是从1到N开始循环
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= N; i++) {
list.add(i);
}
int count = 0;
for (int j = 1; j < N; j++) {
int index = new Random().nextInt(j);
int value = list.get(index);
System.out.println("随机位置:" + index + "--对应的数据:" + value + "--当前循环次数:" + count);
list.remove(index);
count++;
}
}
image.png
网友评论