簡體   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