官方解答 · 置頂Java
官方解答|快照總和對照
官方解答|快照總和對照
解題思路
Snapshot 建構子複製 nums,values() 再傳回複本。solve 另建 changed 副本並執行「全部平方」,原快照維持不變。最後回傳 [原值總和, 新值總和],空輸入為[0,0]。
正確性與邊界
三份陣列沒有共用可變資料,輸入與快照都不受變更影響。讀首尾前先檢查長度,空陣列的摘要依約定補 0。
複雜度
時間 O(n),額外空間 O(n)。
公開範例
輸入 {"nums": [1]},依上述步驟得到 [1, 1]。
下方程式可直接取代起始碼;使用 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*x;
}
int[] original = snapshot.values();
List<Integer> result = new ArrayList<>();
int oldSum=0, newSum=0;
for (int i = 0; i < nums.length; i++) { oldSum += original[i]; newSum += changed[i]; }
result.add(oldSum); result.add(newSum);
return result;
}
}
留言討論 0
登入 後就能留言,一起討論不同的寫法。