官方解答 · 置頂Java
官方解答|待處理工作清單
官方解答|待處理工作清單
解題思路
使用 ArrayDeque,在尾端新增、前端取出,形成先進先出。容量固定 3。新增先檢查容量,滿額時拒絕新增。指令 1 取一筆,指令 2 取全部,最後輸出最後儲存資料依取出順序排列,不改變前面統計。
正確性與邊界
空集合取出不產生紀錄,也不計拒絕新增。汰除屬於實際取出;重複拒絕發生在汰除前。peek 只看下一筆不真的取出,最後狀態輸出使用獨立清單,不改先前統計。
複雜度
設 m 為指令數、c 為固定容量。時間 O(mc),額外空間 O(m+c);不查重的 ArrayDeque 操作總時間 O(m)。
公開範例
輸入 {"commands": [[0, 5]]},依上述步驟得到 [5]。
下方程式可直接取代起始碼;使用 Java 11,入口為 Solution.solve。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
import java.util.*;
public class Solution {
public static List<Integer> solve(int[][] commands) {
ArrayDeque<Integer> queue = new ArrayDeque<>();
List<Integer> removed = new ArrayList<>(), trace = new ArrayList<>();
int added=0, rejected=0;
for (int[] command : commands) {
int type=command[0], value=command[1];
if (type == 0) {
if (false) rejected++;
else if (queue.size() == 3 && true) rejected++;
else {
if (queue.size() == 3) removed.add(queue.removeFirst());
queue.add(value); added++;
}
} else if (type == 1) {
if (!queue.isEmpty()) removed.add(queue.removeFirst());
} else {
while (!queue.isEmpty()) removed.add(queue.removeFirst());
}
}
List<Integer> result = new ArrayList<>();
while (!queue.isEmpty()) result.add(queue.removeFirst());
return result;
}
}
留言討論 0
登入 後就能留言,一起討論不同的寫法。