在Java中使用队列作为int数组,找到两个加起来为特定和n的数字

时间:2015-10-17 21:24:21

标签: java arrays stack queue

我需要使用Java中的Queues编写一段代码,允许我使用给定数组中的2个整数来查找,这些整数一起给出了x的特定和整数。

让我们说:

int[] array = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum = 5;

我理解队列是什么以及enqueue和dequeue之间的主体。我没有使用带有for for循环的队列来完成代码,但我真的不明白如何使用队列来完成它。

有人可以给我提示或提供帮助吗?非常感谢。 (我也被允许使用堆栈,但队列对我来说似乎更简单。)

2 个答案:

答案 0 :(得分:0)

可以对值进行排序,例如使用PriorityQueue

在这种情况下,只需使用2 PriorityQueue s,一个按升序排序,一个按升序排序。两个队列都peek()并添加值。如果总和太低,poll()第一个队列,如果太高,poll()第二个队列。重复直到总和正确,或直到队列为空。

或者,使用单个Deque,在排序后添加值,并从两端开始工作。

答案 1 :(得分:0)

我试图找到一种方法,只使用常规队列来解决这个问题。到目前为止,它将打印所有可能的对,它们总计为您想要的特定总和。在这种情况下,我只是把5.但是,出现的一个问题是我在迭代队列时得到了重复对。这似乎是因为while循环...我匆忙编写了这个,但希望它能给你一些提示并以某种方式提供帮助!

import java.util.Queue;
import java.util.LinkedList;

public class QueueSums {

public static void main(String args[]) {
    int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    Queue<Integer> queue = new LinkedList<>();

    for (int i : array) {
        queue.add(i);
    }

    System.out.println(queue);

    while (iterateQueue(queue) == false) {
        queue.poll();
        iterateQueue(queue);
    }

}

public static boolean iterateQueue(Queue<Integer> queue) {
    Queue<Integer> queueCopy = new LinkedList<>();
    queueCopy.addAll(queue);

    int sum = 5;
    System.out.println(sum);

    int num1 = queueCopy.peek();

    while (queueCopy.size() > 0) {
        int num2 = queueCopy.peek();

        if (sum == num1 + num2) {
            System.out.println(num1 + " + " + num2 + " works");
            return true;
        }

        else {
            queueCopy.poll();
        }
    }
    return false;

}