- 2025-01-07【Day 11 LeetCode】二叉树的遍历
一、二叉树的遍历二叉树的遍历主要分为深度优先遍历和广度优先遍历。深度优先是先往深处走,走到尽头返回;广度优先遍历是一层一层往下遍历。其中,深度优先遍历对应三种顺序,前序、中序、后序遍历,特点也很好记,就是根节点的位置。根节点位于前面就是前序,遍历顺序为根节点-左子
- 2025-01-07面试经典150题——链表(二)
文章目录1、删除链表的倒数第N个结点1.1题目链接1.2题目描述1.3解题代码1.4解题思路2、删除排序链表中的重复元素II2.1题目链接2.2题目描述2.3解题代码2.4解题思路3、旋转链表3.1题目链接3.2题目描述3.3解题代码3.4解题思路4、分隔链表4.1题目链接4.2
- 2025-01-07双指针算法专题
目录1.移动零1.1算法原理1.2算法代码 2.复写零2.1算法原理 2.2算法代码3.快乐数3.1算法原理3.2算法代码4.盛水最多的容器4.1算法原理 4.2算法代码5.有效三角形的个数5.1算法原理5.2算法代码6. 剑指offer:和为s的两个数(原)6.1算法
- 2025-01-06142环形链表
最简单的思路:哈希。进阶那个快慢指针确实想不到。//哈希,空间为O(n)classSolution{public:ListNode*detectCycle(ListNode*head){unordered_set<ListNode*>adds;if(head==nullptr)returnNULL;ListNode*cur=head;
- 2025-01-06138. 随机链表的复制(中)
目录题目哈希表题目深拷贝一个链表,要求新链表中的每个节点都是新创建的,并且这些节点的random指针都指向新链表中的相应节点。哈希表先使用Map建立映射,然后根据映射将random和next指针指向对应的节点或者nullvarcopyRandomList=function(head){//如果链表为空
- 2025-01-0525. K 个一组翻转链表(难)
目录题目法一、模拟--迭代法二、递归题目给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际
- 2025-01-05OJ随机链表的复制题目分析
题目内容:138.随机链表的复制-力扣(LeetCode)分析: 这道题目,第一眼感觉非常乱,这是正常的,但是我们经过仔细分析示例明白后,其实也并不是那么难。现在让我们一起来分析分析吧!1.题目要求的是链表的复制,那么我们得想我们该怎么做,才能很好地进行下去呢?2.是直接把原链表一个一个
- 2025-01-0419删除链表的倒数第n个结点
正常思路,先遍历一遍链表得到长度,然后进行第二次遍历得到待删除结点的上一个结点classSolution{public:ListNode*removeNthFromEnd(ListNode*head,intn){ListNode*dummyHead=newListNode(0);dummyHead->next=head;ListNode*cur=
- 2025-01-04Verilog5_有限状态机
一、有限状态机(FiniteStateMachine,FSM)基本概念 有限状态机是由寄存器组和组合逻辑构成的硬件时序电路; 其状态只能在同一时钟跳变沿从一个状态转向另一个状态;状态的选择不仅取决于各个输入值,还取决于当前状态,可用于产生在时钟跳变沿时刻开关
- 2025-01-01链表算法篇——链接彼岸,流离节点的相遇之诗(上)
文章目录前言第一章:链表的意境——节点的孤岛与连接的艺术第二章:链表算法的流动美学第三章:两数相加3.1题目链接:https://leetcode.cn/problems/add-two-numbers/description/3.2题目分析:3.3思路讲解:3.4代码实现:第四章:两两交换链表中的节点4.1题目链接:https://leetc
- 2025-01-01代码随想录打卡 Day 2
代码随想录打卡Day21.链表的定义与操作链表作为基本的数据结构类型,其主要形式有三种:单链表双链表循环链表由于刷代码题平时在OJ上默认定义已经给出,可以直接使用。而在面试/机试时,一般需要需要自己手写链表。因此,正确写出链表的定义是非常有必要的。一个单链表的
- 2024-12-29十道OJ题帮你深入认识链表
好了,之前我们写过单链表的文章,现在我们就通过OJ题的分析,对链表的认识更加充分! 题目一:删除链表中等于给定值val的所有节点203.移除链表元素-力扣(LeetCode)代码:structListNode*removeElements(structListNode*head,intval){structListNode*cur=head;
- 2024-12-29[luoguP10218/省选联考 2024] 魔法手杖
题意给定\(a_1,a_2,\dots,a_n\)以及\(b_1,b_2,\dots,b_n\),满足\(a_i\in[0,2^k-1]\)以及\(b_i\geq0\),你需要给出\(S\subseteq\{1,2,\dots,n\}\)以及\(x\in[0,2^k-1]\)满足以下条件:\(\sum\limits_{i\inS}b_i\leqm\);满足以上条件的前提下,最大化\(val(S,x)
- 2024-12-28删除拼排序链表中的重复元素(最优解)
题目来源82.删除排序链表中的重复元素II-力扣(LeetCode)题目描述给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。示例1:输入:head=[1,2,3,3,4,4,5]输出:[1,2,5]示例2:输入:head=[1,1,1,2,3]
- 2024-12-28【257. 二叉树的所有路径 简单】
题目:给你一个二叉树的根节点root,按任意顺序,返回所有从根节点到叶子节点的路径。叶子节点是指没有子节点的节点。示例1:输入:root=[1,2,3,null,5]输出:[“1->2->5”,“1->3”]示例2:输入:root=[1]输出:[“1”]提示:树中节点的数目在范围[1,100]内-100<=N
- 2024-12-27Python数据结构之双向循环链表
1、循环双向链表特点通过当前结点直接获取上一结点通过头结点的上一结点直接可以去找到尾结点可以进行反向循环链表,即反转链表2、头结点链表头:在数据结构中,链表是一种常见的存储结构。链表的每个节点包含数据和指向下一个节点的指针。链表头是链表的第一个节点,它在链表的
- 2024-12-27代码随想录算法训练营第五十九天|dijkstra(堆优化版)精讲、Bellman_ford
前言打卡代码随想录算法训练营第49期第五十九天⚆_⚆(˘❥˘)(•̀⌓•)シ(人•͈ᴗ•͈)♡♡首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的
- 2024-12-26数据结构--双向循环链表
之前我们写过了单链表的博文了,我们发现这是不是找头找尾有点麻烦啊。这里让我们来引入是双向带头的循环的链表。双向循环链表至此,正文开始:首先让我们来区分什么几种类型:类型单向链表,双向链表,带头/不带头,循环/不循环1.单向链表2.双向链表: 3.带头/不带头4.循环/非
- 2024-12-26二维数组 手动排序
<template><div><el-dialogv-bind="$attrs"v-on="$listeners"@open="onOpen"@close="onClose":title="title"width="800px">
- 2024-12-26128. 最长连续序列
题目链接解题思路:难点在于时间复杂度O(n),如果直接排序,题目就简单了。但是不需要全部有序,只需要每次从其中拿出一个数,是递增的即可,也就是说,使用优先级队列,堆头是最小值。注:该方法仍然是O(n*logn)代码classSolution:deflongestConsecutive(self,nums:List[int])-
- 2024-12-26116. 填充每个节点的下一个右侧节点指针
题目链接解题思路:其实就是在层序遍历的过程中,把next指针填上代码classSolution:defconnect(self,root:'Optional[Node]')->'Optional[Node]':ifroot==None:returnNone#层序遍历的过程中,填好nextqueue=deque()
- 2024-12-26【8.5】链表-删除排序链表中的重复元素
一、题目 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回已排序的链表 。示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围[0,300]内-100<=No
- 2024-12-25103. 二叉树的锯齿形层序遍历
题目链接解题思路:和层序遍历有明显的不同。通过观察,可以得到,当前层,和下一层的顺序是「相反」的,遇到这种相反的问题,考虑用栈。本题就是用两个栈,一个栈在放入时,先放左儿子,再放右儿子,另一个栈在放入时,先放右儿子,再放左儿子。然后两个栈交替使用即可。为什么能得到这个思路?观察
- 2024-12-25102. 二叉树的层序遍历
题目链接解题思路:层序遍历就用队列,唯一需要注意的就是,要每一层单独收集,所以要用一个变量,记录每一层需要收集的数目,同时还要记录下一层需要收集的数目代码classSolution:deflevelOrder(self,root:Optional[TreeNode])->List[List[int]]:ifroot==No
- 2024-12-2594. 二叉树的中序遍历
题目链接解题思路:中序遍历:左中右,用一个栈,同时用空来标识「中」,所以入栈顺序就是右->中->None->左代码classSolution:definorderTraversal(self,root:Optional[TreeNode])->List[int]:#使用栈#中序的顺序,左中右压栈就是右中左为了标