官方解答 · 置頂Java
官方解答|共用狀態觀察
官方解答|共用狀態觀察
解題思路
建立 original 後,設定other=original,共用同一物件。每輪嚴格先做 first 的「加x」,再做 second 的「減x」,兩次都完成後才讀取狀態。每輪完成兩次方法呼叫後記錄 [original值,other值],全部依序攤平回傳;空輸入為[]。
正確性與邊界
共用參考時兩個變數讀到相同物件,second 可觀察 first 更新後的值;獨立副本則各自更新。空輸入直接依題目約定輸出初始狀態。
複雜度
時間 O(n),追蹤輸出空間 O(n),只回傳最後狀態時 O(1)。
公開範例
輸入 {"nums": [1]},依上述步驟得到 [0, 0]。
下方程式可直接取代起始碼;使用 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 = original;
List<Integer> result = new ArrayList<>();
for (int x : nums) {
original.first(x);
other.second(x);
result.add(original.get()); result.add(other.get());
}
return result;
}
}
留言討論 0
登入 後就能留言,一起討論不同的寫法。