簡體   English   中英

練習面試題,求數組中兩個連續數的最大和Java

[英]Practicing Interview Question, Find Largest sum Of Two Consecutive Numbers In An Array Java

我找到了標題中所述的面試練習題。 到目前為止一切似乎都是正確的,但是我用於比較每個總和的存儲值的ifelse-if語句讓我失望。 如果從數組的前兩個元素中獲得最大和,則它不起作用。 如果他們在其他任何地方,那就是。

我想我從邏輯上理解為什么會這樣,因此為什么我有一個我認為可以解決它的else-if語句。 找到的答案是 51,但這是不正確的。 它應該是前兩個 (100+50)。 我覺得我的邏輯失敗了,任何指導都會很棒!

import java.util.ArrayList;

public class Main { //Qn is to find the largest sum of two consecutive numbers in an array

    public Main() {}

    private static int sum;

    public static void main(String[] args) {

        int[] intArray = new int[]{100, 50, 0, 50, 1, 0, 0};
        ArrayList<Integer> sumArray = new ArrayList<>();
        int sum;
        int answer = 0;

        for (int i = 0; i < (intArray.length - 1); i++) {
            for (int j = 1; j < intArray.length; j++) {
                sum = intArray[i] + intArray[j];
                sumArray.add(sum);

            }
        }

        for (int temp = 0; temp < (sumArray.size()-1); temp++) {
            for (int temp1 = 1; temp1 < sumArray.size(); temp1++) {
                if(sumArray.get(temp) > sumArray.get(temp1)){
                    answer = sumArray.get(temp);
                }
                else if (sumArray.get(temp) < sumArray.get(temp1)) {
                    answer = sumArray.get(temp1);
                }

            }
        }
        System.out.println(answer);
    }
}

實際答案 = 51。預期答案 = 150。

這是很多代碼,我不確定您為什么要將sumArray.get(temp)sumArray.get(temp1)進行比較 - 您應該與answer進行比較; 但老實說,我們可以簡化這一點。

首先將answer初始化為盡可能小的值。 然后迭代數組一次並將連續的總和與當前answer進行比較。 喜歡,

int[] intArray = { 100, 50, 0, 50, 1, 0, 0 };
int answer = Integer.MIN_VALUE;
for (int i = 0; i < intArray.length - 1; i++) {
    int sum = intArray[i] + intArray[i + 1];
    answer = Math.max(answer, sum);
}
System.out.println(answer);

如果使用 Java 8+,您可以通過使用 lambda 來映射數組值並將其流式傳輸到max()來進一步簡化它。 喜歡,

int[] intArray = { 100, 50, 0, 50, 1, 0, 0 };
int answer = IntStream.range(0, intArray.length - 1)
        .map(i -> intArray[i] + intArray[i + 1])
        .max()
        .orElse(Integer.MIN_VALUE);
System.out.println(answer);

您可以做的是創建一個范圍為 0 到數組長度 - 1 的 IntStream,然后映射 values[index] 和 values[index + 1] 的總和,然后找到最大值,否則返回 -1。

    private static int max(int[] values) {
        return IntStream.range(0, values.length - 1)
                .map(index -> values[index] + values[index + 1])
                .max()
                .orElse(-1);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM