CodeSprout程式萌芽
中等第 235 題 · 共用狀態觀察
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Java

官方解答|共用狀態觀察

官方解答|共用狀態觀察

解題思路

建立 original 後,設定other=new Box(original.get()),建立獨立副本。每輪嚴格先做 first 的「乘x」,再做 second 的「減x」,兩次都完成後才讀取狀態。回傳 [original最後值−other最後值],空輸入為[0]。

正確性與邊界

共用參考時兩個變數讀到相同物件,second 可觀察 first 更新後的值;獨立副本則各自更新。空輸入直接依題目約定輸出初始狀態。

複雜度

時間 O(n),追蹤輸出空間 O(n),只回傳最後狀態時 O(1)。

公開範例

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

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

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

import java.util.*;

public class Solution {
    private static class Box {
        private int value;
        Box(int value) { this.value = value; }
        int get() { return value; }
        void first(int x) { value *= x; }
        void second(int x) { value -= x; }
    }

    public static List<Integer> solve(int[] nums) {
        Box original = new Box(0);
        Box other = new Box(original.get());
        List<Integer> result = new ArrayList<>();
        for (int x : nums) {
            original.first(x);
            other.second(x);
            
        }
        result.add(original.get()-other.get());
        return result;
    }
}

留言討論 0