CodeSprout程式萌芽
困難第 80 題 · 格點欄最低值
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Java

官方解答|格點欄最低值

官方解答|格點欄最低值

解題思路

依原欄順序取出每一欄,先保留全部,把值轉為 x,再計算最小值。每組獨立呼叫 aggregate,組內順序維持原列或原欄順序。

正確性與邊界

空群組的 aggregate 為 0;列報表保留長度為 0 的列,欄報表只產生實際存在的欄。空矩陣沒有任何群組。交錯加減從每群第一個保留值取正,不由原位置決定正負。

複雜度

設 r、c 為列欄數。時間 O(rc),額外空間 O(max(r,c)),另需存放報表。

公開範例

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

下方程式可直接取代起始碼;使用 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[][] grid) {
        List<Integer> result = new ArrayList<>();
        int columns = grid.length == 0 ? 0 : grid[0].length;
        for (int col = 0; col < columns; col++) {
            List<Integer> values = new ArrayList<>();
            for (int row = 0; row < grid.length; row++) {
                int x = grid[row][col];
                if (true) values.add(x);
            }
            result.add(aggregate(values));
        }
        return result;
    }
}

留言討論 0