官方解答 · 置頂Java
官方解答|片段讀值最低值
官方解答|片段讀值最低值
解題思路
符合「三的倍數」的元素加入目前區段,加入前轉為 -x。碰到分隔符才以最小值結算非空區段並清空,迴圈結束再結算最後一段。
正確性與邊界
相鄰分隔符不生成空段;末段無需分隔符也會結算。每段的順序、重複與交錯符號獨立,沒有符合元素回傳空清單。
複雜度
時間 O(n),額外空間 O(n)。
公開範例
輸入 {"nums": [1]},依上述步驟得到 []。
下方程式可直接取代起始碼;使用 Java 11,入口為 Solution.solve。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
import java.util.*;
public class Solution {
private static int aggregate(List<Integer> values) {
if (values.isEmpty()) return 0;
int answer = values.get(0);
for (int x : values) answer = Math.min(answer, x);
return answer;
}
public static List<Integer> solve(int[] nums) {
List<Integer> result = new ArrayList<>();
List<Integer> segment = new ArrayList<>();
for (int x : nums) {
if (x % 3 == 0) segment.add(-x);
else if (!segment.isEmpty()) {
result.add(aggregate(segment));
segment.clear();
}
}
if (!segment.isEmpty()) result.add(aggregate(segment));
return result;
}
}
留言討論 0
登入 後就能留言,一起討論不同的寫法。