CodeSprout程式萌芽
中等第 225 題 · 快照讀值變化
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Java

官方解答|快照讀值變化

官方解答|快照讀值變化

解題思路

Snapshot 建構子複製 nums,values() 再傳回複本。solve 另建 changed 副本並執行「全部反號」,原快照維持不變。最後依索引回傳每個新值減原值,空輸入為[]。

正確性與邊界

三份陣列沒有共用可變資料,輸入與快照都不受變更影響。讀首尾前先檢查長度,空陣列的摘要依約定補 0。

複雜度

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

公開範例

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

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

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

import java.util.*;

public class Solution {
    private static class Snapshot {
        private final int[] data;
        Snapshot(int[] nums) { data = nums.clone(); }
        int[] values() { return data.clone(); }
    }

    public static List<Integer> solve(int[] nums) {
        Snapshot snapshot = new Snapshot(nums);
        int[] changed = nums.clone();
        for (int i = 0; i < changed.length; i++) {
            int x = changed[i]; changed[i] = -x;
        }
        int[] original = snapshot.values();
        List<Integer> result = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) result.add(changed[i]-original[i]);
        return result;
    }
}

留言討論 0