gpt4 book ai didi

java - 带有循环 Java 的数组

转载 作者:行者123 更新时间:2023-11-29 06:55:37 25 4
gpt4 key购买 nike

我想打印只出现两次的数组中的元素。因此,例如,如果数字 2 出现 3 或 4 次,则不应打印它。到目前为止我写的代码如下。我的代码中的问题与循环有关。例如,对于数字 2,由于 j=i+1 是初始化条件,因此内层循环不会读取第 j 位置之前的元素 - 因为那里是索引 6 处的 2,它不会计算它之前的 2,使所需条件为真并显示 2。有没有办法解决这个问题?

public class Problem2 {

public static void exactlytwice(int[] x) {
int count, j;
for (int i = 0; i < x.length; i++) {
count = 0;
for (j = i + 1; j < x.length; j++) {
if (x[i] == x[j])
count++;
}
if (count == 1) System.out.print(x[i] + " ");
}
}

public static void main(String[] args) {
int[] x = new int[15];
x[0] = 2;
x[1] = 2;
x[2] = 2;
x[3] = 13;
x[4] = 44;
x[5] = 44;
x[6] = 2;
x[7] = 63;
x[8] = 63;
x[9] = 90;
x[10] = 1;
x[11] = 2;
x[12] = 150;
x[13] = 150;
x[14] = 180;

exactlytwice(x);
}
}

最佳答案

除了您编写的问题之外,我看到您的代码存在的更大问题是它的效率低下。您在此处的循环中执行循环,这非常慢 (o(n^2))。

我的建议是保留一个数字->计数的映射,然后只取在映射中只出现两次的:

public static void exactlytwice(int[] x) {
Map<Integer, Integer> counter = new HashMap<>();
for (int i = 0; i < x.length; i++) {
if (counter.contains(i)) {
counter.put(i,1);
} else {
counter.put(i,counter.get(i)+1);
}
}

for (Integer i : counter.keyset()) {
if (counter.get(i) == 2) {
System.out.println(i);
}
}
}

关于java - 带有循环 Java 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34833158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com