gpt4 book ai didi

java - 如何迭代一堆流并一次读取一个元素?

转载 作者:行者123 更新时间:2023-12-02 12:38:24 25 4
gpt4 key购买 nike

我有一个流类,其中按升序排序。

class Stream {
boolean hasNext();
int peek();
int next();
}

我需要编写一个程序来合并多个流,并打印出在不同流中多次存在的元素而不重复。

这就是我用伪代码设计它的方式:

// print out numbers with occurance greater than (k).
void mergeStreams(List<Stream> streams, int k) {
int minCount = 0;
int min = Integer.MAX_VALUE;
List<Stream> minStreams;

loop through each stream and read in elements on head {
if (streams.size() < k) return;
if (!stream.hasNext()) {
streams.remove(stream); continue;
}
if (stream.peek() <= min) {
if (stream.peek() == min) {
minCount++;
}
else {
minStreams = new ArrayList<Stream>();
min = stream.peek();
minCount = 1;

}
minStreams.add(stream);
}
if last stream in streams {
if (minCount >= k) {
System.out.println(min);
for (Stream s : minStreams) {
if (s.hasNext()) s.next();
else streams.remove(s);
}
}
}

问题是我不知道如何准确地迭代流并一次读取元素,因此也不知道伪代码部分。另外,我不确定代码底部的 streams.remove(s) 是否真的从原始流列表中删除流 s ,因为它已添加到新列表中minStreams。我真的可以在这里使用一些建议。

最佳答案

要在迭代列表时从列表中删除元素,您应该使用 Iterator.remove() 。您还需要 while循环整个事情以检查多个值。

void mergeStreams(List<Stream> streams, int k) {
while (streams.size() >= k) { // each loop checks one value (the current minimum)
int minCount = 0;
int min = Integer.MAX_VALUE;
List<Stream> minStreams = new ArrayList<>();

Iterator<Stream> streamIter = streams.iterator(); // supports remove during iteration
while (streamIter.hasNext()) {
Stream stream = streamIter.next();
if (!stream.hasNext()) {
streamIter.remove(); // remove stream from original list
continue;
}
if (stream.peek() <= min) {
if (stream.peek() == min) {
minCount++;
} else {
minStreams = new ArrayList<>();
min = stream.peek();
minCount = 1;
}
minStreams.add(stream);
}
}
if (minCount >= k) { // runs after iterating over streams
System.out.println(min);
}
for (Stream s : minStreams) { // must advance past the current min value
if (s.hasNext()) {
s.next();
} else {
streams.remove(s);
}
}
}
}

我还修复了 minStreams 中的流的错误当 minCount < k 时没有超过最小值,因此它会卡在该值上。

关于java - 如何迭代一堆流并一次读取一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45040056/

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