
Leetcode重点复习
sl_world
这个作者很懒,什么都没留下…
展开
-
Leetcode|堆|快排|215. 数组中的第K个最大元素
文章目录1 小根堆(O(NlogK)O(NlogK)O(NlogK))2 快排(O(NlogN)O(NlogN)O(NlogN))1 小根堆(O(NlogK)O(NlogK)O(NlogK))class Solution {public: int findKthLargest(vector<int>& nums, int k) { priority_queue<int, vector<int>, greater<int>>原创 2021-04-17 21:23:17 · 156 阅读 · 0 评论 -
Leetcode|快排|912. 排序数组
1 快速排序(随机pivot)为什么随机取pivot能避免最坏的情况呢?假设数据是完全随机的话,固定取最后一个数作为pivot,和随机取pivot,达成pivot本身有序的概率是相等的。但实际情况并非如此,实际的数据里有序的情况是多于完全无序的情况的,所以随机取pivot能减少最坏情况出现的概率class Solution {public: void quickSort(vector<int>& nums, int left, int right) { .原创 2021-09-08 16:25:13 · 366 阅读 · 0 评论 -
Leetcode|小根堆|23. 合并K个升序链表
文章目录1 两两链表合并(超时)2 将K个链表首个节点依次压入小根堆,然后逐个弹出1 两两链表合并(超时)class Solution {public: ListNode* merge2Lists(ListNode* l1, ListNode* l2) { auto prehead = new ListNode(); auto merge = prehead; while (l1 || l2) { if (!l1) {原创 2021-07-27 09:49:43 · 302 阅读 · 0 评论 -
Leetcode|滑动窗口|76. 最小覆盖子串
1 滑动窗口class Solution {public: string minWindow(string s, string t) { // need表示t对应的<字符, 频率>,window表示s的 unordered_map<char, int> need, window; // 先根据已知计算得到t对应的每个字符频率 for (auto& c : t) need[c]++; .原创 2021-06-30 22:28:43 · 215 阅读 · 0 评论 -
Leetcode|BFS+DFS拓扑排序|210. 课程表 II
1 DFS拓扑排序class Solution {public: vector<vector<int>> edges; // 邻接矩阵 vector<int> visited; // 0-未搜索; 1-已访问; 2-已压栈 vector<int> res; // 最终结果 stack<int> stk; // 存放结果的栈,图的子节点先入栈,父节点.原创 2021-07-20 13:37:00 · 250 阅读 · 0 评论 -
Leetcode|146. LRU 缓存机制(key2node哈希链表)
解题过程其实这里只要1个哈希链表足矣,代码不难,但一次写对不易,我首次写时两个逻辑点漏掉makeRecent(int key)不是要先删除原节点,再在双链表尾部新增该节点嘛?由于新增节点addRecentKey()方法中已有size++,为保证size不变,需要在调用addRecentKey()方法之前加上size--removeLongestKey()中删除双链表首节点时,注意是head->next->next->prev = head;struct DListNode .原创 2021-04-03 10:33:15 · 203 阅读 · 0 评论 -
Leetcode|堆|347. 前 K 个高频元素
1 堆—优先队列时间复杂度:O(NlogK)O(NlogK)O(NlogK)class Solution {private: unordered_map<int, int> val2feq;public: static bool cmp(const pair<int, int>& a, const pair<int, int>& b) { return a.second >= b.second; }.原创 2021-04-17 21:02:07 · 154 阅读 · 1 评论 -
Leetcode|线性序列|516. 最长回文子序列
1 动态规划【dp数组含义】:s[i, j]的子序列最长为dp[i][j]【状态转移方程】:两字符相等——则回文子序列长度自增2dp[i][j] = dp[i + 1][j - 1] + 2;两字符不等——比较添加s[i]或s[j]可以增长子序列dp[i][j] = max(dp[i][j - 1], dp[i + 1][j]);完整代码如下class Solution {public: int longestPalindromeSubseq(string s) {.原创 2021-03-25 09:18:02 · 213 阅读 · 0 评论 -
Leetcode|找单链表中点+链表反转+链表合并|143. 重排链表
1 寻找单链表中点 + 链表反转 + 链表合并这道题是道综合题,把三个知识点串起来,非常适合复习链表处理的三个技巧【思路】:观察发现可以把链表后一半进行反转,然后当成两个链表的合并任务即可class Solution {public: void reorderList(ListNode* head) { if (!head) return; // 1.寻找链表中点(快慢指针) auto premid = findmid(head); .原创 2021-07-17 22:31:10 · 322 阅读 · 0 评论