CodeSprout程式萌芽
困難第 178 題 · 分段觀測摘要
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Java

官方解答|分段觀測摘要

官方解答|分段觀測摘要

解題思路

先依規則建立群組:依序取出長度 3、4、…直到 nums 全長的前綴;不足 3 個元素時沒有前綴。 對每組只保留絕對值至少三,再計算最大值,依群組建立順序輸出。

正確性與邊界

每組重新建立 values,統計與交錯符號不會跨組延續。空群組為 0;視窗只保留完整長度,不重疊分組則保留最後不足長度的一組。

複雜度

設 n 為陣列長度。前綴總掃描量為 O(n²),固定寬度視窗為 O(nw),不重疊分組為 O(n);額外空間 O(n)。

公開範例

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

下方程式可直接取代起始碼;使用 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.max(answer, x);
        return answer;
    }

    public static List<Integer> solve(int[] nums) {
        List<Integer> result = new ArrayList<>();
        for (int end = 3; end <= nums.length; end++) {
            List<Integer> values = new ArrayList<>();
            for (int i = 0; i < end; i++) {
                int x = nums[i];
                if (Math.abs(x) >= 3) values.add(x);
            }
            result.add(aggregate(values));
        }
        return result;
    }
}

留言討論 0