自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 LeetCode 刷题 -- Day 8

​ 先序遍历树,利用 mostDeepHight 记录遍历过程中遇到的最大深度,mostDeepVal 记录遍历过程中遇到的最大深度的结点值。这样可得到最底层的结点。​ 而利用先序遍历,先访问当前结点的左子树,再访问右子树,再加上 叶子结点的深度大于mostDeepHight 才更新(并非大于等于)这样就保证了对同一层结点,只记录最左边的结点值,即为答案。​ ② 中序序列以 x 为中心,x 左侧的元素为 x 的左子树, x 右侧的元素为 x 的右子树。

2024-04-26 10:24:29 1031 1

原创 LeetCode 刷题 -- Day 7

​ 先是vector ans 数组存各路径的结点,然后遍历ans 数组取出各结点形成路径,这太麻烦了。所以只需判断当前节点引导的子树是不是满二叉树,是的话直接返回子树的结点,不是的话就往下遍历。​ 自顶向下递归,因此对于同一个节点,函数 getHight 会被重复调用,导致时间复杂度较高。​ 自顶向下遍历树的各结点(先序遍历),对每一结点,判断左右子树的高度差是否小于等于 1。② 如果 root1 和 root2 一个为空,一个不为空,则不对称。

2024-04-25 18:23:38 773 1

原创 LeetCode 刷题 -- Day 6

在遍历队列的过程中,利用while(q.size()–) 实现遍历每一层,将遍历的元素出队,并将下一层压入队列,最后就得到了各层结点值了。在遍历队列的过程中,利用while(q.size()–) 实现遍历每一层,将遍历的元素出队,并将下一层压入队列,最后就得到了各层结点值了。DFS 遍历树,且每下一层高度 h+1,当访问到叶子结点时,就得出了一条从根节点到最近叶子结点的路径长度了(为当前h+1),记录最小的路径长度即为答案。② root 不为空,则找它的左右孩子的高度,并返回较大的高度 h。

2024-04-24 21:43:55 1095

原创 LeetCode 刷题 -- Day 5

c++11 新标准引入了三个新成员------- emplace_front,emplace 和 emplace_back,这些操作构造而不是拷贝元素,因此相比push_back 等函数能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升。② 对于push 操作的实现,直接push存入q,对于pop 操作,先把q 中的非队尾元素按序存入 temp,q 的队尾即为要pop的元素,把队尾元素pop后,再将temp中的元素按序存入q。定义优先级队列,自动排序,队首元素即为最大值。

2024-04-22 21:49:52 831

原创 LeetCode 刷题 -- Day 4

有性质:将 s 中第一个(或前k个) s‘ 移去,再 s 末尾加入一个 (或k个)s’ ,则 s 不变。s’ ,将 s 的首尾拼接(ss)后,中间会出现 s。i += 2 * k) ,i 为观察区第一个元素下标,则 ① 为 reverse(s.begin() + i, s.begin() + i + k);从1开始计数,在计数开始前或每数到 2k 时都进行判断处理一次 ①数到2k的倍数则反转前k个,②剩余字符少于k个则全部反转并结束,③ 如果剩余字符少于2k个 但大于等于 k 个则反转前k个并结束。

2024-04-20 11:41:20 699

原创 LeetCode 刷题 -- Day 3

因为使用 sort() 后,nums1 和nums2 中元素都从小到大排列,所以用双指针遍历时 push_back到 ans 的数也是按从小到大的顺序,即下一个要 push_back 到 ans 的数,要么比ans中所有的数都大,要么等于ans.back()。所以值不会越来越大的,那就只有 ①、② 两种情况,那这题就简单了,循环计算各个位置平方和,若得到的值出现过,则说明进入循环了,break;所以这题其实不是用哈希表法,而是用动态规划的知识,动态规划以后再来探讨吧,先学基础的。

2024-03-28 20:32:43 1253

原创 【操作系统知识总结-下】适合考研或面试

​。

2024-03-27 15:49:05 171

原创 【操作系统知识总结-上】适合考研或面试

①程序是指令的集合,是静态的概念。进程是程序在处理机上的一次执行的过程,是动态的概念。程序可以作为软件资料长期保存。进程是有生命周期的。②进程是一个独立的运行单位,能与其它进程并行(并发)活动。而程序则不是。③进程是竞争计算机系统有限资源的基本单位,也是进行处理机调度的基本单位。④不同的进程可以包含同一程序,只要该程序所对应的数据集不同。

2024-03-27 15:47:12 778

原创 【离散数学面试/复试】一些问答题和名词解释

置换规则:设f(A) 是含公式A 的命题公式,f(B) 是用公式B置换了 f(A) 中所有的 A 后得到的命题公式,若 B <=> A,则 f(A) <=> f(B);(1)设无向图G<V,E>,V’⊂V,若p(G-V’)>p(G),且对V’的任何真子集V’‘,p(G-V‘’)=p(G),则称V’为G的。(2)无向图G<V,E>,E’⊂E,若p(G-E’)>p(G),且对E’的任何真子集E’‘,p(G-E‘’)=p(G),则称E’为G的。逻辑等价:如果A,B在其任意赋值下,其真值都相同。

2024-03-25 21:48:17 1084

原创 LeetCode 刷题 -- Day 2

想了很久,发现一种比两趟好一点的方法:用一趟是为了代码跑得快,那我定义两个指针 *fast 和 *slow,fast一次走两步,slow每次走一步,这样fast到底终点后,slow只走了一半。这样只用花一半的时间就能得到链表的长度len了,此时slow还在链表的中间,若 n < len 的话,slow 继续向前next,找到要删除的结点删除就行,这不就一趟实现了。则 当 fast 走了 a 步时,f = a,s = nb + a,两者相遇,并同时指向链表入口。解决方法:用pre指针搭桥,连接各端。

2024-03-24 00:21:22 1186

原创 LeetCode 刷题 -- Day 1

2、为了使用双指针不停移动来更新ans,选择了从两端往中间移动,先让 j = nums.size() - 1,若a[i] [j] > target 再分别讨论 a[i+1] [j] 和 a[i] [j-1] 这两种情况,这样则要么使用DFS,要么用二维数组或结构体(发现没有,其实可以不用数组)定义sum为连续子数组值的和,sum < target 当然是 ++j,sum > target 那 j 不动,sum - nums[i] 后 i++,是不是比 i,j 从两端开始往中间移动好一点。

2024-03-22 19:29:33 587 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除