CodeSprout程式萌芽
中等第 140 題 · 巡檢交錯和
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Java

官方解答|巡檢交錯和

官方解答|巡檢交錯和

解題思路

由左至右判斷「奇數」。符合時加入保留清單;不符合時執行:不符合時清空目前累積,繼續處理後文,因此只保留陣列結尾的連續符合後綴;若最後一個元素不符合,保留資料為空,不回頭使用更早的符合區段。 最後只對保留清單計算交錯加減。

正確性與邊界

continue、break、第一段和最後一段的差異在不符合分支中明確處理。空清單統計為 0;交錯加減依保留後的順序重新編號。

複雜度

時間 O(n),額外空間 O(n)。

公開範例

輸入 {"nums": [1]},依上述步驟得到 1。

下方程式可直接取代起始碼;使用 Java 11,入口為 Solution.solve。

CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式

import java.util.*;

public class Solution {
    private static int aggregate(List<Integer> values) {
        int answer = 0;
        for (int i = 0; i < values.size(); i++)
            answer += (i % 2 == 0 ? values.get(i) : -values.get(i));
        return answer;
    }

    public static int solve(int[] nums) {
        List<Integer> values = new ArrayList<>();
        for (int x : nums) {
            if (!(x % 2 != 0)) {
                values.clear();
                continue;
            }
            values.add(x);
        }
        return aggregate(values);
    }
}

留言討論 0