CodeSprout程式萌芽
困難第 185 題 · 片段讀值最低值
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Java

官方解答|片段讀值最低值

官方解答|片段讀值最低值

解題思路

符合「奇數」的元素加入目前區段,加入前轉為 x/2。碰到分隔符才以最小值結算非空區段並清空,迴圈結束再結算最後一段。

正確性與邊界

相鄰分隔符不生成空段;末段無需分隔符也會結算。每段的順序、重複與交錯符號獨立,沒有符合元素回傳空清單。

複雜度

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

公開範例

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

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

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

import java.util.*;

public class Solution {
    private static int aggregate(List<Integer> values) {
        if (values.isEmpty()) return 0;
        int answer = values.get(0);
        for (int x : values) answer = Math.min(answer, x);
        return answer;
    }

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

留言討論 0