自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 考研生活day2--王道课后习题2.3.1、2.3.2、2.3.3

处理头节点可以直接对链表操作,也可以使用其他方法处理,在这里我提供一个方法,就是使用虚拟头结点对头结点操作,也就是在链表头结点前定义一个虚拟头结点,这样就可以把头结点当作普通节点进行处理了。·大家的第一反应肯定是根据书上所学的书写方法一样书写,但是书上有一种情况没有说明,那就是如果要删除的节点是头节点该如何处理,这里我们就要考虑到头结点是如何处理的。1.可以重新定义一个链表,将第一个链表中的元素取出后,再放入新建的链表中,即可实现,这个方法同样也可以借助栈进行求解。

2024-07-02 00:49:17 625

原创 考研生活day1--王道课后习题2.2.1、2.2.2、2.2.3

代码如下。

2024-07-01 01:04:37 599

原创 代码随想录day35--动态规划的应用2||01背包理论基础、携带研究材料

如果有些想不通,或者懵逼,那就回顾一下i代表什么,j又代表什么2.确定递推公式根据dp[i][j]的含义,可以推导出,可以由两个方向推导出dp[i][j]·不放物品:由dp[i-1]推出,即背包容量为j,里面不放物品i的最大价值,此时dp[i][j]就是dp[i-1][j]。(其实就是当物品i的重量大于背包j的重量时,物品i无法放进背包中,所以背包内的价值依旧和前面相同)

2024-04-04 15:59:18 1414 1

原创 编程生活day7--明明的随机数、6翻了、吃火锅

明明的随机数题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入有2行,第1行为1个正整数,表示所生成的随机数的个数:N;第2行有N个用空格隔开的正整数,为所产生的随机数。输出。

2024-04-03 23:38:14 2287

原创 编程生活day6--回文子串、蛇形填充数组、笨小猴、单词排序

这算是一道有些上难度的题目了,第二个函数,如果大家有不明白的地方,可以代入准确数字进行演算,即可知道为什么这样写了,而且也很好推算出来。其实第二个函数可以继续优化,使用双指针法进行求解,可以提高运行速度。

2024-04-03 00:49:51 2414

原创 编程生活day5--日期格式化、倒数第N个字符、福到了

这道题的逻辑与思维能力并没有什么难点,可以用于平时练习找找手感。

2024-03-26 20:18:07 1221 1

原创 编程生活day4--点赞、情人节、古风排版

其实可以用一维数组就能成功求解,将每个数字存入数组中,每次遇到相同的数字就进行一次加一,就可以很好的记录出出现了几次,最后再使用一个maxx变量,找出出现最多次数的数字即可。·我们只需要知道需要输出的行数,而不需要知道列数,但是很多同学不知道如何求出行数,在这提出一个方法,但是可以当作一个参考,只适用于本题。

2024-03-25 23:55:14 976

原创 编程生活day3--Left Pad、出生年

Left Pad题目描述根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是******GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

2024-03-25 00:10:28 609 2

原创 编程生活day2--念数字、求整数段和、大笨钟

本题并没有什么难度,需要注意的地方是要在输出的地方要将数字变为字符不要将问题复杂化,我看到有些题解,竟然使用了map进行求解,当然能解决问题的都是好方法,但是能用点简单快速的代码更好。

2024-03-21 20:36:17 1568

原创 编程生活day1--个位数统计、考试座位号、A-B、计算阶乘和

这道题并没有什么技术上的问题,只需要明白map如何使用,以及要想到使用map这一关键点。

2024-03-21 15:24:57 1097

原创 代码随想录day34--动态规划的应用2 | LeetCode343.整数拆分、LeetCode96.不同的二叉搜索树

这道题的递推公式并不好想,而且初始化的时候,也有很多细节的地方,而且一切都需要围绕着dp[i]的定义推导,否则就会出现自相矛盾的地方。

2024-02-26 15:25:20 1386

原创 代码随想录day33-动态规划的应用1

依旧是动态规划五部曲,一定要使用五部曲才能保证精准无误,与之前的题目相比,这次我们就要考虑如何正确的初始化了,难度在初步递增。

2024-02-25 11:19:22 1019

原创 代码随想录day32--动态规划理论基础

动态规划简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点一定要和贪心区别出来,贪心没有状态推导,而是直接从局部直接选择最优。在贪心中,有一个例子是背包问题。eg:由N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能使用一次,求解将哪些物品装进背包里物品价值总和最大。

2024-02-25 00:13:09 1354

原创 代码随想录day31--贪心的应用5

这道题需要先想到个例,如果可以实现,那么就很自然的想到贪心。考虑到贪心后再考虑遍历顺序,最后的代码实现也需要一些技巧,就比如说flag的使用。

2024-02-24 16:07:48 443

原创 代码随想录day30--贪心的应用4

所有都是先将各个区间排序,按左边界排序或者右边界排序都可以,按照左边界从小到大排序之后,如果右intervals[i][0]

2024-02-24 00:30:23 1135

原创 代码随想录day29--贪心的应用3

这题只要一分析,分析清楚后,就会发现其实这题的逻辑一点也不复杂遇到没有思路的题目,可以先静下心来,把能遇到的情况分析一下,只要分析到了具体情况,一下子就豁然开朗了,如果一直陷入想从整体撒谎给你寻找找零方案,就会把自己陷入,各种情况交叉,只会越想越乱。

2024-02-22 17:05:42 1179

原创 代码随想录day28--贪心的应用2

这题看起来好像并没有使用贪心,虽然没有使用贪心,但是贪心的思想还是要有的,要找到局部最优和全局最优,否则就会陷入贪心的简单题目凭感觉做,贪心的难题不会做。

2024-02-21 21:13:16 1085

原创 代码随想录day27--贪心的应用1

总结:这道题关键点在于,不要被惯性思维困住,而是将其看做覆盖范围,范围内一定是可以到达的,只要找到可以贪的地方,也就是局部最优解,再判断是否可以推出整体最优解,无反例,即可以使用贪心。·我们可以将遍历到的值理解为覆盖,比如示例2中3覆盖了2,1,0,再使用被覆盖的数值中最大的数值,也就是2,再找到最大值,最后发现无法到达4,所以示例2结果是false。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。

2024-02-21 00:36:06 1136

原创 代码随想录day26--贪心基础

贪心的本质是选择每一阶段的局部最优,从而达到全局最优举个例子:有一堆钞票,可以拿走十张,如果想要达到最大的金额,应该怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额后推出的就是全局最优。

2024-02-20 22:21:44 905

原创 代码随想录day25--回溯的应用4

这题对于之前已经养成了思维定式,或者一直套模板的同学而言,起到了很好的警醒作用。可以拓宽大家的思路。

2024-02-18 23:10:43 1286

原创 代码随想录day24--回溯的应用3

但是加入题解中的条件不一样,需要一个pointNum,记录添加逗号的数量,如果pointNum为3说明字符串分成了四段,再创造一个isVaild函数,验证一下每段字符串是否合法,即可将其加入到结果集中。·这题与之前的组合问题并不一样,如果把子集问题、组合问题、分割问题都抽象为一棵树,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!·将组合问题和分割问题,与子集问题概念混淆,组合问题和分割问题都素收集树的叶子节点,而子集问题是找到树的所有节点。LeetCode93.修复IP地址。

2024-02-18 01:05:47 1223

原创 代码随想录day23--回溯的应用2

所以,再遍历的过程中,startIndex不需要想后移动。

2024-02-17 00:33:51 1017

原创 代码随想录day22--回溯的应用1||LeetCode216.组合总和III、LeetCode17.电话号码的字母组合

解题过程依旧是将题目抽象为树形结构,按照回溯三部曲进行讲解,最后给出剪枝的优化,这是回溯的基础的经典题目,相信大家搞明白后,对回溯的认识会进一步加深。

2024-02-14 20:49:55 1189

原创 代码随想录day21--回溯基础--LeetCode77.组合

总结:刚开始学习回溯算法,可以先将题目抽象成N叉树结构,再进行剪枝操作,可以直观的看出搜索过程,以及需要的结果。第一次取1,集合变为2,3,4,因为k为2,所以只需要再取一个数就可以了,分别取2,3,4,得集合[1,2][1,3][1,4],以此类推。我们提到回溯算法是树形结构,既然是树形结构,说明一定存在叶子结点,所以终止条件也就是搜索到了叶子结点,也就是找到了满足条件的答案。可以看出这棵树,一开始集合是1,2,3,4,从左向右取数,取过的数就不再取。图中可以发现n相当于树的宽度,k相当于树的深度。

2024-02-14 12:45:21 1031 1

原创 代码随想录day20--二叉树的应用8

这道题其实不难,但是理解起来可能会有些费劲,需要对递归的理解有比较深刻的认识。

2024-02-12 22:06:04 1220 1

原创 代码随想录day19--二叉树的应用7

二叉搜索树的最近祖先问题,要比求二叉树的公共祖先问题简单。直接从上向下查找目标区间,遇到目标区间内的间之间返回,再一次体现了二叉搜索树的性质的重要性。在遍历树的过程中,如果递归函数有返回值,如何区分要搜索一条边,还是搜索整个树。

2024-02-11 00:51:18 968 1

原创 代码随想录day18--二叉树的应用6

与前一题一样,使用双指针进行解题,定义cur为快指针,pre为慢指针,若cur->val==pre->val则count++,再定义maxCount,若maxCount==count则放入数组中,若不等于则清空数组,最终返回数组。·求最小绝对差值,因为二叉搜索树是一个有序的树,所以,可以使用中序遍历,再去求保存到数组中的元素的最小绝对差值,这样就会简单很多了。·这道题的解题思路,需要自底向上查找,就能找到公共祖先了,所以解这道题使用的是后续遍历,根据左右子树的返回值,来处理中节点的逻辑。

2024-02-06 00:20:57 950 1

原创 代码随想录day17--二叉树的应用5

本题解题代码虽稍有繁琐,但是递归的逻辑比较清晰,所以适合基础较为薄弱的同学进行观看学习。

2024-02-02 00:59:55 1202

原创 代码随想录day16--二叉树的应用4

有很多同学可能会让遍历过的叶子节点相加再和count进行对比,若相等则正确,不相等则不正确,但是可以使用逆向思维,使用count对遍历的叶子节点进行相减,这样会更方便以及更易理解。总结:这是一道很经典的使用递归与回溯的题目,代码中的回溯过程十分的清晰,如果看代码不能很清晰的理解,可以尝试画图进行理解。·也可以使用迭代法,也就是层序遍历,使用层序遍历十分的简单,一层层的遍历,找到最深一层的第一个元素即可。不存在 sum = 5 的根节点到叶子节点的路径。由于树是空的,所以不存在根节点到叶子节点的路径。

2024-02-01 00:41:18 1199 1

原创 代码随想录day15--二叉树的应用3

如何判断当前结点是左叶子结点,这个问题可能困扰了部分同学,可以使用递归法,判断一个结点是否有左结点,再判断这个结点的左结点的左结点和这个结点的左结点的右节点是否存在(判断是否为叶子结点)即可。总结:一定要搞明白,深度和高度的概念和区别,求深度就使用先序遍历,求高度就使用后序遍历,这道题也可以使用迭代法进行求解,但是这题使用迭代法进行求解效率比较低。·解这道题需要使用先序遍历,进行求解,因为题目要求从根节点到叶子的路径,所有需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。

2024-01-30 23:16:30 2065 1

原创 代码随想录day14--二叉树应用2

3.确定单层递归的逻辑:先求它的左子树的深度,再求右子树的深度,最后,取左右深度的最大数值再+1(+1是因为算上当前中间节点),即可求出当前二叉树的深度。的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。·本题可以使用前序遍历,也可以使用后序遍历,使用前序遍历求的是深度,使用后序遍历求的是高度。所以我们使用后序遍历进行求解。·第一点与前一题一样,要分清楚,前序求的是深度,后序求的是高度,所以这题采用的是后序遍历。

2024-01-28 00:03:04 968

原创 代码随想录day13--二叉树的应用1

我们先将一层的结点放入队列中,然后使用一个变量size记录下此时的队列长度(一定要记录因为队列长度是会改变的),再遍历看这个结点是否有左右孩子,如果有就放入队列中,如果没有就结束遍历,再将size中的数值取出,当size==0后,再重新记录队列的长度。·这道题所使用的是后序遍历,也一定是后序遍历,因为我们要通过递归函数的返回值,来判断两个子树的内测节点和外侧节点是否相等。总结:这道题看代码十分的简洁,但是递归三部曲并没有很好的体现出来,大家在做题的时候,要想清楚逻辑,把所有的情况都想到位。

2024-01-27 01:07:12 1083

原创 代码随想录day12--二叉树的遍历

二叉树的遍历有:前序遍历、中序遍历以及后序遍历。。

2024-01-25 21:44:45 566 1

原创 代码随想录day11--队列的应用

在这道题中,我们使用优先级队列来对部分频率进行排序,使用小顶堆(父亲结点小于左右孩子),因为要统计最大前k个元素,只有小顶堆每次将最小的元素弹出,最后小顶堆里积累的才是前k个最大元素怒。2.push(value):如果push的元素value大于入口元素的数值,那么久将队列入口的元素弹出,知道push元素的数值小于等于队列入口元素的数值为止。·这道题能写出来完全是看题解写出来的,可以使用队列进行求解,放进窗口里的元素,随着窗口的移动,队列也一进一出。的滑动窗口从数组的最左侧移动到数组的最右侧。

2024-01-24 16:46:23 1237 1

原创 代码随想录day10--栈的应用

这道题的想法比较巧妙,代码实现难度并不大,技巧性的题目逻辑比较重要。

2024-01-22 21:51:55 996

原创 代码随想录day9--栈,队列

这道题是一道模拟题,并不需要使用算法,考察的是对栈的基本操作的掌握,因为对栈的不熟悉,所以使用的并不熟悉。

2024-01-21 22:02:51 840

原创 代码随想录day8--字符串总结、双指针总结

在代码随想录day1中,就提到了数组中的元素,不能真正的删除,只能被覆盖,但是如果使用暴力发进行求解LeetCode27.移除元素的时间复杂度是O(n^2)无法通过,这时候就可以使用双指针法进行求解。通过两个指针在一个for循环下完成两个for循环的工作。字符串篇在LeetCode344.反转字符串中,使用双指针法,定义两个下标,一个在字符串起始位置,一个在字符串末尾位置,两个指针同时向中间移动,并且交换元素,时间复杂度是O(n)。在替换数字。

2024-01-20 17:23:40 1322

原创 代码随想录day7--字符串

字符串也是一种数组,所以元素在内存中是连续分布的,这也就代表了,在数组中能使用的方法,在字符串中大部分也能使用。

2024-01-19 00:21:01 1092 1

原创 代码随想录day5--哈希表基础

当我们遇到要。

2024-01-16 17:47:30 1069 1

原创 代码随想录day4--链表进阶

这道题在难度上并没有什么太大问题,主要是解法比较难想到,可以说比较新奇。又学到了一个双指针的妙用。

2024-01-13 23:35:51 991 1

空空如也

空空如也

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

TA关注的人

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