官方解答 · 置頂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
登入 後就能留言,一起討論不同的寫法。