力扣215. 数组中的第K个最大元素
摘要:1.二叉最小堆法:维护一个size为k的最小堆,每次从堆中去除一个比item更小的元素,最后留下的便是最大的k个元素。(nlogn) 1 class Solution { 2 public: 3 int findKthLargest(vector<int>& nums, int k) { 4 pri
阅读全文
posted @
2025-09-11 23:49
Coder何
阅读(7)
推荐(0)
力扣106. 从中序与后序遍历序列构造二叉树
摘要:常规题面,直接维护两种的遍历的下标位置进行递归即可。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7
阅读全文
posted @
2025-03-30 21:35
Coder何
阅读(19)
推荐(0)
力扣151. 反转字符串中的单词
摘要:暴力思路:找出所有单词后再反转,需要辅助空间。 1 class Solution { 2 public: 3 string reverseWords(string s) { 4 if (s.size() <= 1) { 5 return s; 6 } 7 vector<string> v; 8 st
阅读全文
posted @
2025-03-26 19:08
Coder何
阅读(9)
推荐(0)
力扣19. 删除链表的倒数第 N 个结点
摘要:双指针法,保证左右指针之间距离为n-1,就能保证右指针到达最后一个的时候,左指针到达倒数第n个 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6
阅读全文
posted @
2025-03-15 22:08
Coder何
阅读(15)
推荐(0)
力扣25. K 个一组翻转链表
摘要:1.需要画图确定反转的逻辑 2.习惯性地使用pre、cur、nxt三个指针来思路清晰地完成一系列变换 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next;
阅读全文
posted @
2025-03-13 15:29
Coder何
阅读(20)
推荐(0)
力扣82. 删除排序链表中的重复元素 II
摘要:暴力解: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int
阅读全文
posted @
2025-03-05 21:39
Coder何
阅读(18)
推荐(0)
力扣22. 括号生成(回溯)
摘要:左括号在n之前可以随意输出,右括号只有比左括号少才可以输出。 1 class Solution { 2 public: 3 vector<string> res; 4 void backTravel(int n, int left, int right, string s) { 5 if (left
阅读全文
posted @
2025-03-04 20:58
Coder何
阅读(28)
推荐(0)
力扣3. 无重复字符的最长子串
摘要:1 class Solution { 2 public: 3 int lengthOfLongestSubstring(string s) { 4 int left = 0, right = 0; 5 int start = 0, len = 0; 6 int repeat = 0; //记录重复元
阅读全文
posted @
2025-03-04 19:06
Coder何
阅读(12)
推荐(0)
力扣438. 找到字符串中所有字母异位词(滑动窗口)
摘要:常规的滑动窗口问题,要注意满足答案的条件:1.窗口长度与p字符串长度一致2.字符充足的个数与p中不重复个数相同 1 class Solution { 2 public: 3 vector<int> findAnagrams(string s, string p) { 4 vector<int> re
阅读全文
posted @
2025-03-04 19:05
Coder何
阅读(17)
推荐(0)
力扣167. 两数之和 II - 输入有序数组
摘要:每次固定一个数,再二分搜另一个数即可。 1 class Solution { 2 public: 3 vector<int> numbers; 4 int binaryFind(int left, int right, int key) { 5 if (left > right) { 6 retur
阅读全文
posted @
2025-03-03 16:34
Coder何
阅读(9)
推荐(0)
力扣86. 分隔链表
摘要:1.需要新建两个链表,一个存取比x小的,另一个存取大于等于x的2.将1中的两个链表合并 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * Li
阅读全文
posted @
2025-03-03 15:06
Coder何
阅读(18)
推荐(0)
力扣61. 旋转链表
摘要:注意去除重复的轮数 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode() : val(0), next(nullptr) {
阅读全文
posted @
2025-03-02 21:57
Coder何
阅读(17)
推荐(0)
力扣146. LRU 缓存(STL实现)
摘要:核心思路是有两个数据结构,一个哈希表和一个双向链表。双向链表用来实现一个队列,队头元素最近被使用,队尾元素最久没被使用;哈希表用来记录key与key相应的节点在链表中的指针。 1.面试场景要的应该是自己写结构体来实现双向链表,写的时候注意位置交换时指针的操作顺序 2.注意每次操作要同时维护哈希表和链
阅读全文
posted @
2025-02-28 12:24
Coder何
阅读(52)
推荐(0)
力扣162. 寻找峰值(二分查找变式)
摘要:1.峰值到来前一定呈增长的趋势,所以只要存在a[i+1]>a[i],说明i的正方向上一定有一个峰值;若存在a[i-1]>a[i],说明i的负方向上一定有一个峰值 2.题目给出左右的边界都是-∞,所以对于边界元素(a[0],a[nums.size()-1])只要比相邻元素大,那就是峰值。 3.使用二分
阅读全文
posted @
2025-02-27 20:27
Coder何
阅读(31)
推荐(0)
力扣128. 最长连续序列
摘要:1.排序后运算(nlogn),不符合题意,但在力扣里超过100%,估计是数据量太小。 2.并查集,主要开销在查找时间上 1 class Solution { 2 public: 3 unordered_map<int, int> parent; //记录父节点 4 unordered_map<int
阅读全文
posted @
2025-02-27 10:50
Coder何
阅读(18)
推荐(0)
力扣92. 反转链表 II
摘要:1.使用vector辅助反转 1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode() : val(0), next(nullp
阅读全文
posted @
2025-02-25 21:52
Coder何
阅读(11)
推荐(0)
力扣74. 搜索二维矩阵(二分查找)
摘要:需要两次二分查找,一次用于确定行,另一次用于确定列 1 class Solution { 2 public: 3 int m, n; 4 vector<vector<int>> matrix; 5 int binaryRowFind(int left, int right, int key) { 6
阅读全文
posted @
2025-02-25 20:29
Coder何
阅读(41)
推荐(0)
力扣103. 二叉树的锯齿形层序遍历(BFS)
摘要:切记不能在层序遍历的过程中修改左右次序,不然会导致遍历的结构错误。 该题只需照常层序遍历,在最后输出的结果的时候改变方向即可 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * Tre
阅读全文
posted @
2025-02-24 21:36
Coder何
阅读(18)
推荐(0)
力扣79. 单词搜索(网格DFS + 回溯)
摘要:比较常规的多起点搜索问题 1 class Solution { 2 public: 3 typedef pair<int, int> pii; 4 int m, n; 5 vector<pii> start; 6 vector<vector<char>> board; 7 vector<int> n
阅读全文
posted @
2025-02-20 17:22
Coder何
阅读(21)
推荐(0)
力扣994 腐烂的橘子(BFS)
摘要:使用BFS(层序遍历)来解决该题。起点就是腐烂橘子的点位集合。 错误思路:一开始脑子没转过来,对起点集合里的每一个点进行了一次bfs,然后求最小值 1 class Solution { 2 public: 3 typedef pair<int, int> pii; 4 map<pii, int> d
阅读全文
posted @
2025-02-20 14:21
Coder何
阅读(36)
推荐(0)