繁体   English   中英

在Java中将队列用于int数组,找到两个加起来等于特定和n的数字

[英]Use of queues in Java for an array of int, find two numbers that add up to specific sum n

我需要使用Java中的Queues编写一段代码,该代码使我能够使用给定数组中的2个整数进行查找,这些整数共同为我提供了x的特定总和。

比方说:

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

我了解什么是队列以及入队与出队之间的主体。 我没有在代码中使用带有double for循环的队列,但是我不太了解如何使用队列。

谁能给我提示或提供帮助? 将不胜感激。 (我也被允许使用堆栈,但是队列对我来说似乎更简单)。

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

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

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

我试图找到一种仅使用常规队列来解决此问题的方法。 到目前为止,它将打印所有可能的对,它们加起来就是您想要的特定总和。 在这种情况下,我只放入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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM