簡體   English   中英

比較數組中的連續元素並求和相同的值

[英]Compare consecutive elements in array and sum same values

public class LoopTest {

    public static void main(String[] args) {

        int[] myarr = {12, 12, 12, 8, 15, 15};

        //Boolean array to mark the elements,defaults false 
        boolean[] b = new boolean[myarr.length];

        //Compare Consecutive values and mark them true if equal
        for (int i = 1; i < myarr.length; i++) {
            if (myarr[i - 1] == myarr[i]) {
                b[i - 1] = b[i] = true;
            }
        }
        int sum = 0;

        //Add all the values in myarr with indices marked as equal
        for (int i = 0; i < b.length; i++) {
            if (b[i]) {
                sum += myarr[i];
            }
        }

        System.out.println(sum);


    }
}

輸出:

66

說明:

12 + 12 + 12 + 15 + 15

有沒有更好/更干凈的方法可以比較數組中的值並僅在相等時才添加值,而無需使用實用程序方法?

您可以保留重復項目的連續計數,並在運行結束時將它們添加到sum

int[] myarr = {12, 12, 12, 8, 15, 15};
// assumes > 0 length
int count = 1;
int sum = 0;
for (int i = 1; i < myarr.length; i++) {
    if (myarr[i] == myarr[i - 1]) {
        count++;
    } else {
        if (count > 1) {
            sum += count * myarr[i - 1];
        }
        count = 1;
    }
}
// handle if last elements are duplicates
if (count > 1) {
    sum += count * myarr[myarr.length - 1];
}
System.out.println(sum);

以下代碼將起作用:

public class LoopTest {
    public static void main(String[] args) {
        int[] myarr = {12, 12, 12, 8, 15, 15};
        int sum = 0;
        int occ = 1;
        for (int i = 1; i < myarr.length; i++) {
            if (myarr[i - 1] == myarr[i]) {
                occ++;
            } else {
                if (occ > 1) {
                    sum += (occ * myarr[i - 1]);
                }
                occ = 1;
            }
            if (i == myarr.length - 1) {
                if (occ > 1) {
                    sum += (occ * myarr[i - 1]);
                }
            }
        }
        System.out.println(sum);
    }
}

您可以通過linear efficiency解決此linear efficiency 該程序更干凈一點,可以在所有條件下工作,檢查所有邊緣情況 它會為您的問題給出66的正確答案。 它遍歷數組,並檢查每個元素是否連續(與上一個元素相同)。 如果是這樣,它將元素的值加到總和上。 需要包括邊緣情況以說明每個連續塊的起始元素,這些起始元素也必須添加到總和中。

private static int consecutiveCompare(int[] array)
{
    int sum = 0;

    for (int i = 1; i < array.length; i++)
    {
        if (array[i] == array[i-1])
        {
            if (i == 1)
            {
                sum += array[i];
            }
            else if (array[i] != array[i-2])
            {
                sum += array[i];
            }
            sum += array[i];
        }
    }

    return sum;
}

尚未測試所有極端情況,這就是我的想法:

public class LoopTest {

    public static void main(String[] args) {

        int[] myarr = {1,1,1,2,2,3,3,4};

        //Boolean array to mark the elements,defaults false 
        boolean[] b = new boolean[myarr.length];

        //Last value tracker.
        int lastVal = myarr[0];
        //Count occurrences in a sequence.
        int cntr = 1;
        //Sum counter.
        int sum = 0;
        //Compare Consecutive values and mark them true if equal
        for (int i = 1; i < myarr.length; i++) {
            if (myarr[i] == lastVal) {
                cntr++;
                //If last sequence mathching.
                if (i == myarr.length-1) {
                     sum += lastVal * cntr;
                }
            } else {
                if (cntr > 1) {
                    sum += lastVal * cntr;
                    //Reset counter. 
                    cntr = 1;
                }
                lastVal = myarr[i];
            }
        }
        System.out.println(sum);
    }
}

暫無
暫無

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

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