- 博客(19)
- 收藏
- 关注
原创 PS流解析总结(1)理论基础
3字节 24bits------Packet start code prefix字段:包头起始码,固定为0x000001,与后面的字段map_stream_id一起组成分组开始码,标志着分组的开始。2字节 16bits------PES packet length:(UI)PES包长度,包括此字节后的可选包头和负载的长度,占位16bit,当其为0时,需要根据下个PS包头起始码来确定PES包长度。16 bits------program_stream_info_length字段:长度字段,占位16bit;
2024-01-26 18:54:07
1603
1
原创 二叉树09 ● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树
讲搜索树看成有序数组的累加 因为题中的遍历方式是右根左 所以采取中序遍历 然后reversal。分割的数组长度为偶数的时候,中间元素为两个,取哪个元素为根都可以 所以本题的答案也不唯一。关键点在于怎么处理如下图的情况 怎么接住删除掉的节点的子节点。或者直接右根左来遍历。
2023-10-24 21:21:21
52
1
原创 二叉树08 ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点
235. 二叉搜索树的最近公共祖先参数:返回节点 传入三个节点 遍历节点 p q终止条件:空节点结束单层逻辑:701.二叉搜索树中的插入操作遍历方式:搜索二叉树此题不需要遍历整个树 因为对根节点无操作 三种遍历方式都可以参数:返回节点 传入节点 与构造的节点val值单层逻辑:搜索树 遍历左 或右一个子树即可。
2023-10-21 17:45:35
55
1
原创 二叉树07 ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先
单层递归:左:递归 根:再定义个节点 Pre节点每次记录上次递归传入的(递归是先遍历到左叶子 再类似栈先进后出 往回弹出 进行操作)pre节点是当前节点的上一个遍历顺序的节点 比较两者差值即可 右:递归。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。传参:返回节点 传入三个节点 分别是遍历节点+p和q节点。遍历方式:中序遍历 搜索树中序遍历为有序数组。
2023-10-19 14:33:21
48
1
原创 二叉树06 ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
搜索树的特性:左子树的值都小于根节点 右子树的值都大于根节点 左子树和右子树也都是搜索树。利用 中序遍历下,输出的二叉搜索树节点的数值是有序序列这个特点(中序遍历为左根右)构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。单层逻辑:利用搜索树特性 不需要left right都遍历。注意 终止条件为一个节点为null时 返回另一个树的节点。终止条件:叶子节点结束(不需要往下构造)即数组大小为1。终止条件:当前节点为null或者当前节点的值为输入值。700.二叉搜索树中的搜索。
2023-10-17 20:33:53
39
原创 二叉树05 ● 513.找树左下角的值● 112. 路径总和 113.路径总和ii● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
● 513.找树左下角的值思路1.递归 选择前序遍历 确定叶子节点ps:因为根节点不做任何操作 所以前序 中序 后序 都可以终止条件:遍历到叶子节点即可 depth需要回溯即递归传入的时候传入depth+1注意考虑 只有一个节点的情况(depth与maxdepth的大小判断)2.迭代 深度最大的一层最左边的元素● 112. 路径总和 113.路径总和i递归 选择前序 中序 后序都可以 因为根节点不操作(注意 值传递不会影响值本身 地址传递才会影响值本事)
2023-10-16 15:20:17
29
1
原创 二叉树part04 ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
层序遍历适用于求深度(上->下)但是不适用求高度(下->上) 所以不能使用queue 得使用stack 来模仿后序遍历(后序补充)1.递归求高度 高度选择后序遍历 使用api abs()求绝对值 和三元表达式?1.递归 选择后序遍历 根带着左叶子的值 左右根 根为左右之和。求深度适合用前序遍历,而求高度适合用后序遍历。2.迭代 理解层序遍历 选择stack。257. 二叉树的所有路径。1.递归 选择前序遍历+回溯。2.迭代 选择层序遍历。
2023-10-12 15:15:52
39
1
原创 二叉树3 ● 104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
104.二叉树的最大深度111.二叉树的最小深度,注意是。什么是叶子节点,才是叶子节点思路:1.递归法:使用后序遍历(因为根节点的高度即为二叉树的深度)递归单层逻辑中需要排除非叶子节点的情况2.迭代法:注意找最小 所以发现叶子节点就return。
2023-10-10 21:00:40
31
1
原创 二叉树2 层序遍历(BFS) 翻转二叉树 对称二叉树
两个思路 第一种DFS 在前中后序遍历中(递归方法+迭代思路) 选择前序 然后交换左右节点。选择后序遍历 因为需要先判断 左右节点 再回到根 方法两样子一个递归 一个迭代。使用队列这种数据结构 利用size来确定循环次数(while里面套的if)针对二叉树的问题,解题之前一定要想清楚究竟是前中后序遍历,还是层序遍历。递归(返回值 传参 + 终止条件 + 单层递归逻辑)迭代 数据结构选用栈和队列都可以。
2023-10-09 16:49:23
46
1
原创 二叉树01 递归遍历 迭代遍历 统一迭代
写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中)在这里也就会重复调用自己来实现递归的过程。
2023-10-08 19:56:01
67
1
原创 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值
然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。遍历找出左边的字符串 存在栈中 因为栈先入后出 所以每次的右字符串和栈顶比较就可以(小技巧)第二步就是把stack转成string 先是+=top 然后reverse 完成。暴力法 把(){}[]这些字符串都存访到vector中 然后遍历是否绑定。需要理解题目意思 三种括号一一对应 中间不可多 左不可多 右不可多。stoll函数 字符串转换成long long 类型。逆波兰表达式 即为二叉树的后序表达式。
2023-10-03 14:14:52
28
原创 栈与队列 232 用栈实现队列 225 用队列实现栈
栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。队列相当于两头通 那么需要的是赌注一边 并且改变输出顺序 那么就需要另一个队列来储存此次push之前的数据 1->2->1这样操作。empty push pop peek(返回队列开头的元素)top(获得栈顶元素即最右边即最新进入的元素)也可以用一个队列完成 每次将size--的元素重新放入队列。用两个栈 来实现 一个入栈一个出栈 完成。232 用栈实现队列。225 用队列实现栈。
2023-10-02 22:52:33
34
1
原创 ● 344.反转字符串● 541. 反转字符串II● 剑指Offer 05.替换空格● 151.翻转字符串里的单词● 剑指Offer58-II.左旋转字符串
string的size方法返回的是无符号整型 直接减去Int值可能出现负数 无符号数出现负数则会出问题。reverse的使用方法两种1.两个传参 auto 针对vector与string。2.2个传参 int int 两个下标 针对数组(数字数组或者字符数组)1.使用reverse方法 reverse的传参混乱了 思路不清晰。分割每一个单词 然后依次放进去 但是代码写的杂乱 通过率20%剑指Offer58-II.左旋转字符串。151.翻转字符串里的单词。541. 反转字符串II。最简单的一层for循环。
2023-09-27 22:12:00
33
原创 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
双指针吧 一共三层遍历 i left right left为i的下一个 right为最后一个 注意!前提是已经排序好(包含重复元素)i left right 相加大于0 right需要-- 小于0 left++i需要与左比较而不是和右比较 因为和右相同可能和为0(此时i已经去重 对于left right 来说 i 不会再变化)第二次出错在于去重是用if continue的因为外面已经有循环(对于非left与right的去重)!去重操作 k去重 i= k+1 i去重有变化 同三数之和的Left。
2023-09-27 00:25:56
23
原创 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
这里可以只使用一层for循环 因为是两值相加 所以每次去ret中是否有当前target-当前值的值 有的花即可输出 没有 则记录该值 因为需要输出下标 所以需要不仅知道数值 还得知道数值的下标 所以选择使用map key存数值 value存下标。2.题解思路:只使用一个数组来记录 A字符串++ B字符串-- ps:注意string的一些基础函数使用.size() string[i-'a'](asciaII码转换)因为需要自动去重 所以选择unordered_set这种数据结构(底层实现哈希表 数值不重复)
2023-09-25 20:50:42
28
1
原创 ● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II
2.题解思路:巧妙!使用两个遍历节点 一个为fast 一个为slow 快节点先走n+1步 然后快慢节点一点循环直到快节点走到null 为什么是n+1 因为删除第n个节点 需要移动到n-1个节点那。2.题解思路:其实真正是三个一组 那么从虚拟头节点开始 while循环进行每次操作 注意循环终止条件!1.自己思路:可以定义快慢指针 然后快的相对速度比慢的多1个 这样不会出现漏掉情况 后续没有有效思路 失败!1.自己思路: 删除链表操作已知 困难点在于怎么根据N 来判断循环次数。19.删除链表的倒数第N个节点。
2023-09-25 00:14:42
39
1
原创 203.移除链表元素 707.设计链表 206.反转链表
用cur遍历到最后 得到最后的节点即为反转的head(但是此时该节点指向为null 没有指向下一节点)但是后续无思路 看到了提示双指针法 继续思考 自己思路想的是再弄一个节点 当作最后输出链表的头节点但是运行超时。cur = cur->next对链接进行重新排序(注意 此时头节点即head是不可能改变的)cur的作用是遍历重新排序 但是重新排序的头节点还是head不会改变 即保护head node可以返回!注意 遍历的节点cur 是选择虚拟头节点 还是真正的Head节点。第一种情况: 移除头节点。
2023-09-22 22:17:25
556
原创 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
1.自己思路 :二维数组(行在前 列在后) 图结构 中心值为n的平方 行数与列数均为n-1 接下来的问题点在于数组下标怎么变化代表顺时针(草稿纸采取了n 2 3 4 的情况对应的图 先找规律)自己思路没有区分好每一行怎么填数值 按照自己分析为n->n-1->n-1->n-2->1。第三次自己写错误 第一行的二维数组赋值时第一个下标应该是y不应该是I值(考虑多圈的情况)列0->n-2 行1->n-2 列n-2->0 行n-2->1(第二轮)列0->n 行0->n-1 列n-1->0 行n-1->1(第一轮)
2023-09-21 22:11:09
931
原创 leetcode 704. 二分查找,27. 移除元素
2.二分法思路:核心就是每次查找都是(left + right)/2 和对边界的判断 分为right能否取到 闭则值需要+1(left = middle+1) 开则直接相等(right = middle) 注意 退出条件也不同 运行时间快了很多 内存仍占很多。1.自己思路:初始思路暴力法 erase 但是发现漏洞 因为i+=会跳过相等元素的下一个 解决方法:相等i值不变 顺利通过。2.双指针思路:双指针 left与right均为0但是right为初始数组一直遍历 left为新数组的下标。
2023-09-20 20:24:27
932
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人