- 博客(19)
- 收藏
- 关注
原创 二分法,我悟了!①
leetcode 34. 在排序数组中查找元素的第一个和最后一个位置如果各位过去接触过二分,可以先去尝试一下这道题,没有做过建议直接看视频或者直接听我接下来的讲解。解这道题,我们要着重解决的就是下面的四个问题(以下四个问题通了,不仅这道题懂了,整个二分问题都懂了)边界到底取啥?看答案有些时候是left = 0, right = nums.size() - 1,有些时候怎么又是left = 0, right = nums.size() 了…循环结束的条件到底是啥?
2024-05-15 23:03:02 1785
原创 LeetCode - 142 - 环形链表II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:.
2020-08-12 13:37:16 185
原创 BST删除操作
BST的删除操作向来被认为难度很大,因为它不同于插入,定位到了那个该插入的位置选择左边/右边进行插入即可,而删除操作则需要分成以下三种情况进行讨论,删除难度从上到下依次递增:case1 叶子结点case2 只有左子树/只有右子树的结点case3 左子树和右子树都存在的结点其实case1,case2的难度系数都不大,重难点就是在于处理case3这种情况的结点case1 叶子结点直接将...
2020-04-09 03:48:42 3366 7
原创 树的遍历方式 --- 前序遍历
前言先给大家上一段代码。这段代码出自LeetCode 144.Binary Tree Preorder Traversal是二叉树的前序遍历的递归代码写法。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
2020-03-25 22:30:04 1300
原创 LeetCode - 19 - 删除链表的倒数第N个结点
过去刷LeetCode题推动那个工人指针跑的循环大多数都是while循环。因为我们在C语言刚接触循环这个概念的时候就学过,for一般都用于作用的结构大小较为明显,循环次数确定的场景下。而while之所以称为条件循环就是因为其没有固定的循环次数限制。一般在链表中,当我们的工人指针来到链表尽头的时候会结束循环,所以我们一般会使用while ( worker != nullptr )这样的一个语句来判断...
2020-02-12 16:38:14 130
原创 LeetCode - 234 - 回文链表 + 9 - 回文数(为234题打开思路)
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?234题原题 https://leetcode-cn.com/problems/palindrome-linked-list/回文是一个编程中经常出现的概...
2020-02-11 16:12:17 177
原创 LeetCode - 24 - 两两交换链表中的结点
好久不见!刚放假 + 电脑故障太多卡顿问题很严重,半个多月没更新博客。(其实就是惰性 + 贪玩,但我这个人不找借口好像浑身难受)今天半夜精神亢奋,于是来更新一篇LeetCode刷题。24.两两交换链表中的结点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该...
2020-01-22 22:46:25 346
原创 读书笔记 --- 数据结构与算法分析C语言描述 --- 12.29 --- Chapter4 树 page 80 - 87
4.4 AVL树对一棵预先排序的树输入数据,一连串的insert操作将花费二次时间,解决这个问题其中一个办法就是有一个称为平衡(balance)的附加结构条件,任何结点深度均不能过深。AVL(Adelson-Velskii and Landis)树是带有平衡条件的二叉查找树。这个平衡条件固定且容易保持,需保证树的深度为O(log N)。我们一般将空子树高度定义为-1,加入我们要求结点左右子树...
2019-12-29 23:30:21 181
原创 读书笔记 --- 数据结构与算法分析C语言描述 --- 12.24 --- Chapter4 树 page76 - 79
4.3.5 delete结点情况对应解决方案没有任何儿子的结点此结点为BST中的叶结点,直接删除仅有一个儿子的结点类似于一个链表:grandfather->father->children中删除掉father结点的操作有两个儿子的结点找到右子树最小的结点代替被删除的结点,这个最小的结点为右子树中最左边的元素,因为最小的那个元素一定不会再有左儿子(...
2019-12-24 22:41:49 215
原创 读书笔记 --- 数据结构与算法分析C语言描述 --- 12.22 --- Chapter4 树 page70 - 76
4.2 二叉树二叉树每个结点至多有两个儿子,即可以拥有(0,1,2)个儿子。由此二叉树的平均深度要比N小得多,为O(sqrt(N)),再对于特殊类型的二叉树:二叉查找树(Binary Search Tree)深度平均值为O(log N)。而特殊情况就是二叉树是一棵斜树,为一个特殊的链表,深度可以达到N - 1。4.2.1 实现结点的儿子可以用指针指向他们,类似于一个双向链表。struct ...
2019-12-22 19:26:56 162
原创 读书笔记 --- 数据结构与算法分析C语言描述 --- 12.21 --- Chapter4 树 page65 - 69
4.0 引言为解决链表的线性访问时间过慢这个问题,介绍一种大部分操作时间平均为O(log N)的数据结构 — 树第二种修改,对于长的指令序列每种操作的运行时间基本上是O(log N) — 二叉查找树(Binary Search Tree)树在cs中是非常有用的抽象概念,本章我们将学习:树在操作系统中的文件系统的应用树如何能够用来计算算术表达式的值(常考)树支持O(log N)进行...
2019-12-21 20:36:03 264
原创 畅谈链表 --- 初级篇4 ---谈谈链表的插入与删除操作
首先在浏览本博客前,各位看客可以先去查看一下我过去的几篇博客。尤其是第一篇,即我对链表这个结构建立起的架构。畅谈链表—初级篇1—谈谈链表结构本身畅谈链表—初级篇2—谈谈链表的头指针与头结点畅谈链表—初级篇3—谈谈链表的头插法与尾插法插入操作我们可以把插入操作看作是街区的扩建,那么这幢大楼选址完成且落成后,我们需要做的就是把新大楼前一幢房子的路牌指向这座新大楼,而把新大楼的路牌指向前一幢房...
2019-12-15 20:59:42 275
原创 LeetCode - 203 - 移除链表元素
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5链接:https://leetcode-cn.com/problems/remove-linked-list-elements/这道题真的毫无难度…极为普通的"删"操作…这一期来水一波...
2019-12-08 23:58:10 130
原创 LeetCode - 83 - 删除链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/方法一:遍历...
2019-12-03 23:34:19 164
原创 LeetCode - 876 - 链表的中间结点
876.链表的中间结点 Middle of the Linked List给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode...
2019-11-12 21:23:17 142 1
原创 LeetCode - 206 - 反转链表
206.反转链表 Reverse Linked List反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?链接:https://leetcode-cn.com/problems/reverse-lin...
2019-11-02 23:02:50 159
原创 畅谈链表---初级篇3---谈谈链表的头插法与尾插法
上次与各位谈了谈有关头指针与头结点在链表操作中的重要性,今天想与大家正式来谈谈链表操作,我们先从链表的建立开始引入。(本文的论述均建立在链表有头指针有头结点的基础之上)头插法头插法相对来说是新手较为容易理解的一种建立链表的方式,众所周知,使用头插法后,读取数据的顺序与生成的链表中的元素的顺序是相反的。我们根据字面意思也非常好理解,头插法顾名思义就是将新结点插入到当前链表的开头。LinkLis...
2019-10-29 23:25:24 618
原创 畅谈链表---初级篇2---谈谈链表的头指针与头结点
阅读此篇请先关注上一篇博文—畅谈链表—初级篇1—谈谈链表结构本身https://blog.csdn.net/qq_44406656/article/details/99010348其中是我对链表结构本身提供了自己的架构,将链表形式抽象为了房屋。将头指针和头结点单独拿出来写一篇文章在我看来并非多此一举,理解好头结点与头指针对将来刷题是有一些帮助的。算不上题外话的题外话:链表的头指针以及头结点...
2019-08-21 20:19:23 478 1
原创 畅谈链表---初级篇1---谈谈链表结构本身
typedef struct LinkList{ ElemType data; struct LinkList *next;}
2019-08-20 20:34:35 212
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人