自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 问答 (1)
  • 收藏
  • 关注

原创 Bustub Lab0

bustub lab0总结

2022-05-03 12:21:39 378

原创 leetcode 210拓扑排序

思路一:深度优先搜索1.首先我们将这些边集转化为图,题目的意思可以转化为,要访问一个节点,必须访问完其指向的其他节点才能够访问。2.这样,我们可以采取深度优先搜索的思想,假设现在访问节点cur,循环遍历访问它指向的其他未访问过的节点(nexti,nexti+1,nexti+2next_i ,next_{i+1} , next_{i+2}nexti​,nexti+1​,nexti+2​),也就是依次进行dfs(nexti),dfs(nexti+1)......dfs(next_i),dfs(next_{i

2022-02-19 12:54:46 284

原创 leetcode 321

思路 :单调栈+自定义归并1.如果单纯地求一个数组nums[n]固定长度k的最大子数组subnums[k]的话,我们使用贪心+单调栈的思想即可解决。为了保证子数组最大,我们尽可能让大数靠前首先在保证单调栈的长度最终能够大于等于k,在此基础上保证单调栈的元素尽可能地递减扫描一遍数组,记当前遍历的元素位置为p,在保证最后单调栈的长度能够达到k的基础上,依次从栈顶弹出小于nums[p]的元素,然后再加入元素nums[p]。如果栈的元素大于k,需要将多余的元素从栈顶弹出。2.如果是两个数组nums1[

2022-01-23 12:39:00 217

原创 leetcode 44

思路:贪心1.假设p格式为”*p1*p2*p3*“,其中pi代表一个被分割的子串,我们只需要在s当中找到相应子串便可匹配成功了。比如说s=“abcdefgabc”,p=“bcdfgb*”,那么我们只需要按pi的相对顺序到s当中找到相应子串即可匹配成功。2.然而p也可能表示为”p0*p1*p2*p3*p4“,这样的话,我们得保证s当中必须以p0开头而且以p4结尾。3.为了保证以p4结尾,我们从后开始遍历s和p,令i=s.size()-1,j=p.size()-1,如果s[i]p[j]或者p[j]’?’,

2022-01-21 11:22:05 378

原创 leetcode 665

贪心算法+数组

2022-01-20 15:45:20 319

原创 leetcode 564

思路假设数字长度为length,我们将数字平均分成两部分prefix和last,第一部分prefix长度为(length+1)/2,last长度也是(length+1)/2要找最接近本数字的回文数字,我们需要在数字本身做最小的修改。我们分两种情况考虑本身是回文数:1.因为prefix是镜像对称的,我们在修改prefix的同时,last也随之而改变,比如说123321,我们修改prefix=124,那么last=421才能保证回文性。2.我们对prefix进行修改,因为结果要保证最接近n,那么我们需

2022-01-19 15:13:06 92

原创 leetcode 188

动态规划+状态压缩

2022-01-16 23:33:29 112

原创 leetcode 31

思路我们观察以下序列123456123465123546123564123654…可以看出这是个紧凑变化的排列,题目求解大意也是如此。如何根据已有序列求出下一个排列呢?观察可知,我们需要将排在前面较小的数nums[j]与排在后面较大的数字nums[k]交换,j<k,比如说123465,我们交换的是4和5,而这样子选择有什么要求呢?1.我们希望较大数字的位置k尽可能地靠右,然后较小数字的位置j尽可能靠近k,这样保证变化幅度变化是最小的。3.在交换完之后,因为需要改变k后面的序列,

2022-01-15 21:25:50 153

原创 leetcode 8

有限状态机

2021-12-28 20:00:06 198

原创 leetcode 11

思路:双指针1.任意设两个指针i和j(i<j),计算其所能够收集的水量temp=min(height[i],height[j])(j-i)。2.在i不能向左移动和j不能向右移动情况下,如何移动能够使得收集的水量更多呢?是先移动i还是j呢?3.我们尝试移动i和j任何一个指针,这样使得宽度减小,宽度减小的情况下,我们如何能够获得更大的水量呢?4.依据公式temp=min(height[i],height[j])(j-i),显然,我们需要保证min(height[i],height[j])的值在增大

2021-12-27 20:53:30 489

原创 leetcode 7

思路1.对于一个普通数字,要求其反转后的结果,需要借助中间变量tmp记录其反转的部分数字结果,也就是每遍历一个数字x[i],首先将tmp10,然后加上x[i]。2.如果需要考虑反转后的数字大小要在int表示的范围内,那么就需要将最后的结果与INT_MAX和INT_MIN作比较,但是由于tmp在计算过程中的可能就已经超出了INT_MAX或者INT_MIN,这样会导致溢出无法比较。3.所以我们在tmp即将要超过INT_MAX或者INT_MIN之前也就是(>=INT_MAX或者是<=INT_MI

2021-12-24 12:37:04 207

原创 leetcode_3

思路:滑动窗口1.遍历字符串,维护一个滑动窗口,每遍历一个字符,保存窗口当中每个字符出现的位置。2.如果新的字符没有在滑动窗口中出现,则直接加入滑动窗口,并保存其位置;否则将滑动窗口缩小,保证滑动窗口每个字符都只出现,也就意味着要清空某些字符的位置信息。代码:class Solution {public: int lengthOfLongestSubstring(string s) { unordered_map<char,int> w; int

2021-12-23 20:19:07 328

原创 leetcode 968

贪心算法+后序遍历

2021-12-05 13:05:34 522

原创 leetcode 714

贪心算法

2021-12-04 22:53:04 559

原创 leetcode 738

贪心算法

2021-12-02 21:58:44 149

原创 leetcode 491

思路一:1.首先我们确定一个结果集合res和一个临时路径集合temp。2.遍历数组的每个元素,对于每个元素,有取和不取两种选择,使得对应的temp不同,当我们遍历完最后一个元素时,需要将temp加入res当中。3.由于题目要求是递增序列,所以在取之前我们需要判断当前元素是否大于等于temp当中最后一个元素,如果不满足,则不取当前元素,然后继续递归遍历下一个元素。4.如果满足的话,我们将当前元素加入temp当中,然后递归遍历下一个元素。在递归回溯之后,我们还需要考虑当前元素不取的情况,所以我们需要将当

2021-11-29 19:03:36 371

原创 leetcode 332

深度优先搜索+贪心选择

2021-11-28 23:26:15 195

原创 线索中序二叉树

线索中序二叉树1.节点的结构typedef struct node{ int lefttype;//左孩子类型,如果是普通左孩子则为Link,如果是前驱则为Thread int righttype;//右孩子类型,如果是普通右孩子则为Link,如果是后继则为Thread struct node* left; struct node* right; int d;}Node;1.线索化算法1.用一个pre指针指向访问当前节点p的前驱节点2.在访问当前以p为

2021-11-20 23:01:38 439

原创 平衡二叉树

平衡二叉树一.插入节点1.如果当前树为空则将新节点作为当前树的根,taller标志为真,插入成功返回如果当前树不为空且根节点root的数据和新节点数据相等,taller标志为假,则插入失败如果当前树不为空且新节点数据小于根节点数据,则递归调用1,将新节点插入当前树的左子树当中(1)如果插入成功,根据taller判断左子树是否长高,如果taller为真,对根节点的平衡因子bf进行判断(2)如果bf==1,即原来左子树就比右子树高了,而且现在左子树又长高了一层,需要对根节点及其左右子树进行右向平衡调

2021-11-20 23:00:30 496

原创 B-树浅实现

B-树查找特定元素e1.假设当前在树t当中查找元素e2.同二叉搜索树类似,先在根结点的key数组中找到e<=key[i]的位置i3.当t不为空​ (1)如果e==key[i],则找到元素,返回查找结果​ (2)如果e<key,则在key[i]的左子树也就是ptr[i]当中继续查找,将当前根节点记为t0,将根节点置为ptr[i],回到1。4.当t为空,则未找到元素,插入位置为t0节点、第i个位置B-树插入元素e1.利用查找算法找到插入的节点p和位置i,ap初始为NULL,指向比e大

2021-11-20 22:59:39 677

原创 leetcode 438

滑动数组+哈希数组

2021-10-08 23:51:19 146

原创 leetcode_程序员面试金典0207

链表+双指针

2021-10-07 23:18:40 182 1

原创 leetcode 19

链表+滑动窗口

2021-10-07 23:17:40 164

原创 leetcode_142

思路:快慢指针1.首先确定是否存在环,为了在O(1)时间内确定是否存在环,我们采取快慢指针的方式。2.初始状态设置快指针fast=head,慢指针slow=head,然后快慢指针遍历整个链表,快指针每次比慢指针走快一步,这样每次多一步积累下去,如果存在环,那么快慢指针肯定会在环之内相遇,也就是slow==fast;如果不存在环,那么快指针肯定会提前走到链表尾部。3.当确定已经存在环时,快慢指针停在环的某个位置,此时我们需要借组该位置确定环的初始位置,这时我们可以思考,是否可以使用快慢指针,在特殊起点开

2021-10-07 22:31:00 94

原创 leetcode 43

数学问题

2021-10-03 09:56:40 174

原创 leetcode_763

思路:贪心算法1.逆序扫描一遍数组,找到每个元素最后出现的位置,记录在last[26]当中2.正序扫描数组,用start记录当前元素段的起始位置,用end记录当前段中元素出现位置最后的那一个元素最后出现的位置。3.判断当前位置是否等于end,如果不是,则更新end,把当前元素加入当前元素段;如果此时位置为end,则将当前元素段长度加入结果数组中,重新开始新的元素段。4.正确性:根据题目要求,每个元素段中的元素只能在当前元素段出现,也就意味着其最晚出现的位置应该在当前元素段之中,根据算法,如果当前位置

2021-10-01 11:15:02 81

原创 leetcode_560

思路:1.记前缀和pre[i]为第i个元素之前所有元素的总和,从左到右遍历数组2.从左到右遍历数组的过程中,如果pre[i]-pre[j]==k,且0<=j<i,这样则找到了一个总和为k的子数组,因为对于一个i可能同时有多个j使得等式成立,所以我们在遍历到第i个元素时需要知道有多少个j满足pre[j]==pre[i]-k。3.因为pre[j]的求解是通过前面元素的遍历得来的,因此我们在求解每个pre[i]之后可以将其存入hash表,其中键为pre[i]的值,如果hash表map中已经存在了

2021-09-29 22:08:34 174

原创 leetcode 334

双指针+简单证明

2021-09-29 17:06:39 414

原创 leetcode 240

二分搜索思想\矩阵分区

2021-09-28 23:24:21 206

原创 leetcode 75

数组+双指针

2021-09-18 23:55:17 108

原创 leetcode 145

二叉树后序遍历

2021-09-10 09:30:24 197

原创 leetcode 144

二叉树前序遍历三种方式1.线索二叉树2.迭代3.递归

2021-09-03 22:53:26 177

原创 leetcode 4

有序数组+中位数二分法+中位数

2021-08-31 15:21:29 200

原创 leetcode 21

经典合并链表分治解法

2021-08-30 19:41:42 77

原创 leetcode 141

链表+双指针妙用

2021-08-29 20:48:57 138

原创 leetcode 73

数组+状态压缩

2021-08-28 21:21:54 134

原创 leetcode 53

数组问题+分治递归解决

2021-08-24 16:32:06 232

原创 leetcode 518 and 377

母函数+DP

2021-08-22 21:24:33 190

原创 leetcode 221

矩阵+DP

2021-08-22 16:30:29 97

原创 leetcode 72

编辑距离dp解决

2021-08-22 11:51:09 100

空空如也

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

TA关注的人

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