FEATURED · 精选文章

leedcode笔记

发布时间 / 2026/8/13 13:04:15
来源 / 创域科博编辑部
栏目 / 资讯中心
leedcode笔记 对于又重复字母查找异位词**滑动窗口**通过哈希表把要确定的字符串p比如“abc”,如果出现有字母则进行记数加一再通过遍历给定的字符串s如果有则对应记字母的记数减一若小于0说明这个左右指针对应的区间不符合p的字母可能是多了次数也可能不包含则需要将左指针加加重新找如果right-left1刚好等于p的大小则弹出左指针即这个初始索引说明找到有**“对于有重复字母的题”**一般要使用哈希表对字母出现的次数进行维护“对于三数之和或者累加”先判断一下是否可以排序如果可以排序那么先排序不能排序比如“和为K的子数组前缀之和数组通过这个方法减少变量或者两数之和都可以通过target-nums[i]查找是否有对应的数”“合并区间”对于区间有重叠的区域需要进行合并即需要对当前区间的右端点和下一个区间的左端点进行判断若是右端点大于左端点更新这个合并后的右端点左端点不变push_back先造临时再塞进容器emplace_back直接在容器里造对象。**“右轮K个数”**这用到了「负负得正」的想法把一个子数组反转两次子数组不变。相交链表解题思路需要求出相交点通对于两个链表分为相交部分和不相交部分对于xz yyzx如果对于一个链表如果遍历完了就从另一个链表的头指针重新开始矩阵“矩阵置为0”如果有一个元素是0那么整个元素的这一行和这一列全置为0解题思路首先需要设置两个数组分别表示行的列的零的标志位先通过双层循环若等零则将这一行这一列的标志位为true;然后再通过一个双层循环根据整个标志位进行赋值0链表相交链表求交点对于两个链表来说如果有交点那么除去相同部分c,只有a有的部分a1只有b有的部分b1.那么a1cb1b1ca1。也就是说遍历链表若两个对应指针不相等那么遍历a遍历完到b的头节点b遍历完到a的头节点。两个最终走的距离是一样的那么最终相等时即是交点。反转链表先定义一个空链表作为反转链表将给定的链表节点指向前一个节点(在反转链表)class Solution {public:ListNode* reverseList(ListNode* head) {ListNode* pre nullptr;ListNode* cur head;while(cur){ListNode* nxt cur-next;cur-nextpre;precur;curnxt;}return pre;}};回文链表第一步判断找链表的中间节点第二步把中间节点到链表末尾反转第三步对两个链表的头节点进行比较若相同则是回文链表若不是则返回false;删除倒数第n个节点左右指针滑动窗口先让右指针右移n个单位然后左右指针同时开始移动当右指针到头时左指针的下一个就是倒数第n个节点然后需要将这个节点删除指向两两交换节点需要用一个哨兵节点来进行假如是1234现在要换成2143那么分成两部分现将哨兵的空节点指向2再指向11再指向3迭代深拷贝一个链表在对应节点创建新的节点比如abc,创建之后为a,a’,b,b’,c,c’.将对应的随机指针复制将这个链表通过dummy哨兵拆分成两个链表二叉树遍历对于二叉树的题首先需要判断这个树是否是空如果是空直接返回if(!root)return;二叉树有三种常见的遍历方式前序遍历根-左-右。先获取根节点值再访问根的左子树最后访问根的右子树。中序遍历左-根-右。先访问根的左子树再获取根节点值最后访问根的右子树。后序遍历左-右-根。先访问根的左子树再访问根的右子树最后获取根节点值。二叉树中序遍历递归voidinorder(TreeNode*root,vectorintres){if(!root){return;}inorder(root-left,res);res.push_back(root-val);//在第一行就是前序在最后一行就是后序inorder(root-right,res);}翻转二叉树首先把叶子节点反转再把根节点对应的节点翻转TreeNode*invertTree(TreeNode*root){if(rootnullptr){returnnullptr;}TreeNode*leftinvertTree(root-left);TreeNode*rightinvertTree(root-right);root-leftright;root-rightleft;returnroot;对称二叉树需要判断根节点的左右两部分是否一致即判断root-leftroot-right;boolisSameTree(TreeNode*p,TreeNode*q){if(pnullptr||qnullptr){returnpq;}returnp-valq-valisSameTree(p-left,q-right)isSameTree(p-right,q-left);}即所有的部分都需要一致val,left,right二叉树最大深度需要调用maxDepth把左节点和右节点的最大深度求出来再加一max(maxDepth(root-left), maxDepth(root-right)) 1;图论岛屿问题我们可以将二维网格看成一个无向图竖直或水平相邻的 1 之间有边相连。为了求出岛屿的数量我们可以扫描整个二维网格。如果一个位置为 1则以其为起始节点开始进行深度优先搜索。在深度优先搜索的过程中每个搜索到的 1 都会被重新标记为 2。最终岛屿的数量就是我们进行深度优先搜索的次数。深拷贝和浅拷贝普通拷贝浅拷贝只复制节点指针新旧链表共享原始节点共享资源深拷贝Deep Copy为链表每一个节点都新建一份内存复制节点里面的数据新链表所有节点都是全新对象和原链表完全独立修改新链表不会影响原链表。资源独立DFS 深度优先搜索Depth‑First Search核心思想一条路走到黑走不通再回溯优先往深处探索而不是横向遍历。类比走迷宫随便选一个方向一直往前走碰到墙 / 走过的点就退回来换另一个方向继续往下走。工作流程访问当前节点标记已访问避免重复走递归遍历它还没访问过的邻接节点所有子节点都走完函数返回回溯BFSBFS队列逐层向外求最短路径首选​DFS栈/递归一条路走到黑适合遍历全部方案、回溯递归和迭代迭代循环原地干活​- 递归自己调自己拆分子问题靠调用栈保存状态(基线条件)
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻