title | date | tags |
---|---|---|
pattern |
2021-04-07 04:12:41 -0700 |
判断链表是否回文?
快慢指针找到中点;翻转后半部分链表。
auto reverser_list = [](ListNode* head) -> ListNode* {
auto curr = head;
ListNode* prev = nullptr;
while (curr) {
auto next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
};
57. Insert Interval
295. Find Median from Data Stream
// priority_queue
auto cmp = [](int left, int right) { return (left ^ 1) < (right ^ 1); };
std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);
for(int n : {1,8,5,6,3,4,0,9,7,2})
q3.push(n);
// 8 9 6 7 4 5 2 3 0 1
可能涉及到DFS
给一组数字 [1, 5, 3] 我们从空集开始:[[]] 把第一个数(1),加到之前已经存在的集合中:[[], [1]]; 把第二个数(5),加到之前的集合中得到:[[], [1], [5], [1,5]]; 再加第三个数(3),则有:[[], [1], [5], [1,5], [3], [1,3], [5,3], [1,5,3]].
当你需要解决的问题的输入是排好序的数组,链表,或是排好序的矩阵,要求咱们寻找某些特定元素。这个时候的不二选择就是二分搜索。这种模式是一种超级牛的用二分来解决问题的方式。
heap; C++ priority_queue