官方解答 · 置頂Java
官方解答|批次累計結果
官方解答|批次累計結果
解題思路
每 5 筆形成一批,包括最後不足的一批。每筆先 trim 解析,再驗證「任何整數」,驗證錯拋受檢 ValidationException。批次復原規則:本批第一次錯誤時跳過該批剩餘資料;仍提交此前成功值的總和,接著處理下一批。finally 每批記錄一次 close,最後輸出每完成一批後,所有已完成批的提交總和。
正確性與邊界
成功筆數只計實際解析且通過驗證者;回滾只影響提交總和,不扣成功筆數。停止批次時未執行的資料不算錯誤。空 texts 不開資源、不產生批次,所有計數為 0。
複雜度
設總文字長度為 L、筆數為 n。時間 O(L+n),額外空間 O(n)。
公開範例
輸入 {"texts": ["1"]},依上述步驟得到 [1]。
下方程式可直接取代起始碼;使用 Java 11,入口為 Solution.solve。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
import java.util.*;
public class Solution {
private static class ValidationException extends Exception {}
public static List<Integer> solve(String[] texts) {
List<Integer> committed = new ArrayList<>(), totals = new ArrayList<>(), paired = new ArrayList<>();
List<String> events = new ArrayList<>();
int total=0, successes=0, errors=0, closed=0, batch=0;
for (int start=0; start<texts.length; start+=5, batch++) {
int batchSum=0, batchErrors=0;
events.add("open:"+batch);
try {
for (int i=start; i<Math.min(start+5,texts.length); i++) {
try {
int x = Integer.parseInt(texts[i].trim(),10);
if (!(true)) throw new ValidationException();
batchSum += x; successes++;
events.add("ok:"+x);
} catch (NumberFormatException | ValidationException error) {
batchErrors++; errors++;
events.add("error");
break;
}
}
} finally {
closed++;
events.add("close:"+batch);
}
committed.add(batchSum); paired.add(batchSum); paired.add(batchErrors);
total += batchSum; totals.add(total);
}
return totals;
}
}
留言討論 0
登入 後就能留言,一起討論不同的寫法。