官方解答 · 置頂Java
官方解答|下一筆工作預覽
官方解答|下一筆工作預覽
解題思路
使用 ArrayDeque,在尾端新增與取出,形成後進先出。容量固定 2。新增先檢查容量,滿額時拒絕新增。指令 1 取一筆,指令 2 取全部,最後輸出每一步完成後下一筆可取出的值,空集合記0,但不真的取出。
正確性與邊界
空集合取出不產生紀錄,也不計拒絕新增。汰除屬於實際取出;重複拒絕發生在汰除前。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() == 2 && true) rejected++;
else {
if (queue.size() == 2) removed.add(queue.removeLast());
queue.add(value); added++;
}
} else if (type == 1) {
if (!queue.isEmpty()) removed.add(queue.removeLast());
} else {
while (!queue.isEmpty()) removed.add(queue.removeLast());
}
trace.add(queue.isEmpty() ? 0 : queue.peekLast());
}
return trace;
}
}
留言討論 0
登入 後就能留言,一起討論不同的寫法。