61. Rotate List
題目網址:https://leetcode.cn/problems/rotate-list/
題意:給一 linked list 的 head 和一整數 k, 將 linked list 每個 node 向右移 k 個位置。
Solution:
想法:將 linked list 分成兩個部分, 倒數 k 個 node(藍色部分)、剩餘部分(綠色部分)
先將 tail->next 設為藍色部分的 head, 並把綠色部分的 tail->next 指向 null
再將藍色部分的 tail 指向綠色部分的 head, 並把藍色部分的 head 設為 newHead
class Solution {public: ListNode* rotateRight(ListNode* head, int k) { if (k == 0 || !head) { return head; } int len = 1; ListNode *tail = he ...
24. Swap Nodes in Pairs
題目網址:https://leetcode.cn/problems/swap-nodes-in-pairs/
題意:給一 linked list, 兩兩交換相鄰的 node, 並返回交換後 linked list。
注意:必須在不修改 node 值的情況下完成(只能進行 node swap)
Solution:
想法:利用 dummy node, 讓 prev 永遠指向當前 pair 的前一個 node, 分為三步驟
1. 取得下一個 pair 的 head, 和當前 pair 的 tail
2. reverse 當前 pair, 並將 prev 指向當前 pair 的 head(更新前的 tail)
3. 更新 pointers
class Solution {public: ListNode* swapPairs(ListNode* head) { ListNode *dummy = new ListNode(0, head); ListNode *prev = dummy, *cur = head; ...
328. Odd Even Linked List
題目網址:https://leetcode.cn/problems/odd-even-linked-list/
題意:給一 single linked list 的 head, 將奇數位置的 node 分組在一起, 然後是偶數位置的 node 分組在一起, 然後將偶數組 linked list 串接在奇數組 linked list 後面。
注意:奇數組和偶數組內的相對順序應和輸入中的順序相同。
設計 $O(n)$ time 且 $O(1)$ space 的演算法
Solution:
想法:用兩個奇偶 pointers 分別指向奇偶 linked list 的起始位置, 另外需要一個單獨的 pointer evenHead 來保存偶數組 linked list 的起點位置
class Solution {public: ListNode* oddEvenList(ListNode* head) { if (!head || !head->next) { return head; } ...
378. Kth Smallest Element in a Sorted Matrix
題目網址:https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/
題意:給一 n x n matrix, 其中每行、每列各自按照升序排序, 返回 matrix 中第 k 小的元素。
注意:它是排序後第 k 小的元素, 而不是第 k 個不同的元素
e.g. matrix = [[1,2], [2,3]], k = 3, 答案是 2
➔ 因為排序後 [1, 2, 2, 3] 中第 3 小的是 2, 重複數不能只算一次(不能看做 [1, 2, 3])
設計 $O(n^2)$ time 的演算法
進階:設計 $O(1)$ space 的演算法
Solution 1:
想法:利用 Heap, 由於 matrix 是已排序好的, 所以 (i, j) 的值一定比 (i + 1, j) 和 (i, j + 1) 的值小, 演算法可參考此影片, 簡單來說分成以下步驟:
取出 min heap 的 top, 也就是當前最小
insert top 的右方和下方到 heap 中 (同位置不能重複 i ...
986. Interval List Intersections
題目網址:https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/
題意:給一 n x n matrix, 其中每行、每列各自按照升序排序, 返回 matrix 中第 k 小的元素。
注意:它是排序後第 k 小的元素, 而不是第 k 個不同的元素
e.g. matrix = [[1,2], [2,3]], k = 3, 答案是 2
➔ 因為排序後 [1, 2, 2, 3] 中第 3 小的是 2, 重複數不能只算一次(不能看做 [1, 2, 3])
設計 $O(n^2)$ time 的演算法
進階:設計 $O(1)$ space 的演算法
Solution 1:
想法:利用 Heap, 由於 matrix 是已排序好的, 所以 (i, j) 的值一定比 (i + 1, j) 和 (i, j + 1) 的值小, 演算法可參考此影片, 簡單來說分成以下步驟:
取出 min heap 的 top, 也就是當前最小
insert top 的右方和下方到 heap 中 (同位置不能重複 insert ...