自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法训练营Day7:三数之和&四数之和

本题求三数之和,可以使用排序+双指针做法来进行求解,先对数组从大到小进行排序,再使用for循环先确定第一个值的下标i,再定义两根指针分别指向i+1和nums.size-1,因为这时候的数组是非递减的,因此如果此时的三个数的和大于target的话只需将high指针向前移动一位也就是high--,反之如果三数之和大于target的话只需将low指针向后移动一位即low++。而当三元组的和等于target时同样需要判断nums[high]与nums[high+1]是否相等,如果相等high--去重。

2024-12-29 18:56:15 180

原创 算法训练营Day6: 删除链表的倒数第 N 个结点&链表相交&环形链表 II

本题我使用的是传统的解法,也就是计算出两个链表的长度差n,将长的链表移动n个位置,再依次比对两个链表的节点是否相交。但是我看见这个解法更加的巧妙,因此研究了一下,在这里附上这份代码。本题采用了非常巧妙地做法,两个链表同时往前走,短的链表一定会比长的链表先到达空节点,此时将短的链表的指针指向长的链表的头部,此时两个节点相差的长度就是短节点的长度,然后继续向前走直至长链表走到空指针将其指向短链表的头节点此时两个头节点与末尾节点的距离都是短链表的长度,因此接下来只需要依次遍历两个链表,直至两节点相等即可。

2024-12-25 17:29:31 297

原创 算法训练营Day5:反转链表&两两交换链表

递归法不太适合新手,理解起来较为困难,这里也附上代码以供参考。当然这题不仅仅只有这两种解法,还可以使用双链表交叉插入也可以实现,即定义两根链表,一根存储原链表中的下标为奇数的节点,另一根链表存储下标为偶数的节点,最后两根链表交叉合并即可。

2024-12-24 17:07:03 386

原创 算法训练营Day4:移除链表元素&设计链表

本题是力扣上的一道简单题,移除链表中指定的元素,可以使用一个虚的头指针指向当前链表。遍历链表,查找当前节点的下一个节点值是否等于val,若等于val,则删除当前节点的下一个节点即可。题目比较简单,就是容易出现小问题,不做过多赘述,这里使用的是单链表,当然也可以使用双链表来实现,可以优化的空间更大,但是这里就不使用了,等二刷的时候再换种写法。

2024-12-24 16:02:02 147

原创 算法训练营Day3:区间和&开发商购买土地

【代码】算法训练营Day3:区间和&开发商购买土地。

2024-12-23 15:18:30 164

原创 算法训练营Day2:有序数组的平方&长度最小的子数组

【代码】算法训练营Day2:有序数组的平方&长度最小的子数组。

2024-12-20 19:49:48 178

原创 算法训练营Day1:数组/二分查找&移除元素

本题没有要求数组内元素的相对顺序不能改变,但是快慢指针依旧是一个很好的解决方案,这里不提供代码,提供解题思路,初始的时候快慢指针都指向数组的起始位置,快指针每次都向前走一步,如果此时快指针的元素值不等于val的话,将慢指针的元素值替换为快指针的元素值并且此时快指针也向前走一步,否则慢指针不动仅仅快指针向前走一步(初始时仅仅当快慢指针都指向val值时会触发,因此此时的慢指针一定指向需要被替换的那个位置)。”,在这里我使用的是“双闭”,则不需要过多的考虑右边界超出范围的问题(一般情况下都可以选择这种情况)。

2024-12-18 20:51:45 330

原创 力扣213.打家劫舍Ⅱ

本题在打家劫舍Ⅰ的基础上增加了一个条件---每一片小区的方式是首尾相连的房子,因此第一间房子和最后一间房子不可以同时被偷,我么可以将数组拆成两块,一块从下标0开始到n-2结束一块从下标1开始到n-1结束,此时只需要让小偷分别去偷这两片房子 肯定不会出现首尾相连的现象,再取两者的最大值即可,本题依然使用动态规划,不知道思路的可以参考打家劫舍Ⅰ。你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。

2024-07-30 16:16:50 251

原创 力扣797.所有可能的路径

本题考查简单的回溯算法,存储所有的路径之和。本题告诉我们路径是从0开始到n-1位置的路径,因此我们可以定义一个vector tmp来先存储0位置,再使用一个循环从0可以走到的位置开始遍历(也就是graph[0][i])从这一点开始深度优先遍历,如果遇见遍历的节点num符合条件,将tmp加入ret中,继续深度优先遍历即可。有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3。可以访问的所有节点的列表(即从节点。题目难度:middle。,请你找出所有从节点。

2024-07-17 17:23:22 388

原创 力扣98.验证二叉搜索树

本题思路没什么好说的,验证是不是二叉搜索树只需要判断二叉树的中序遍历是不是有序的,如果是返回true,否则返回false,中序遍历可以使用栈,也可以使用递归,我在这里使用递归(懒得写那么多了),上代码。,判断其是否是一个有效的二叉搜索树。给你一个二叉树的根节点。

2024-07-11 17:12:21 379

原创 力扣153.寻找旋转排序数组中的最小值

我们可以分析数组的结构,不难发现,虽然说数组是通过一个有序的数组旋转而来,但是不妨碍我们将其看成是两段递增的数组,这样是不是就很清晰了?答案显而易见咯---二分查找,但是,在我们二分查找的时候不希望让第一个有序数组中的元素参与进来,因此只要当nums[mid]>nums[0]的时候,我们可以很明确的知道当前mid位置是位于第一段数组中 我们只需要将low=mid+1即可,那么当nums[mid]<nums[0]呢?原数组为 [0,1,2,4,5,6,7] ,旋转 3 次得到输入数组。

2024-07-11 17:06:37 400

原创 力扣103.二叉树的锯齿层序遍历

首先这题的本质是二叉树的层序遍历,但是在层序遍历上做出了一点改变。每次遍历完下一层都需要反方向遍历,那么怎么解决这个问题呢,在这里,我使用的是一个bool类型的变量flag标志当前层是否需要反向遍历。如果当前层需要反向遍历时我们可以借助栈(本题使用队列实现层序遍历)遍历队列中的元素将其存入栈中,在遍历完本层的节点后打印栈中的内容并且将相应元素出栈,即可得到本层的反向遍历。其余操作与二叉树的层序遍历没有区别。可以参考二叉树的层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

2024-06-25 16:32:09 430

原创 力扣235.二叉搜索树的最近公共祖先

这个题目其实比二叉树的最近公共祖先简单的多,我们只需要把握好二叉搜索树的特性,根节点和左右节点均是有序的,因此只要掌握这个问题,我们就很好解决了。在解题过程之中我们可以找到符合[p,q]之间的第一个节点,就是本题的解,因此我们定义两个变量max和min分别记录pq之中较大的数值和较小的数值。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(, 因为根据定义最近公共祖先节点可以为节点本身。

2024-06-25 16:23:25 453

原创 力扣74.搜索二维矩阵

本题需要充分利用题目给出的两个条件,条件一:本题中的每行整数从左到右是递增的 条件二:本题中的下一行的第一个数大于上一行的最后一个数,因此我们可以得出这样一个结论:每一行之间都存在严格的单调递增,因此我们需要找到目标值只需要先确定目标值位于第几行即可,而判断其位于第几行只需要判断目标值是否小于当前行的最后一个值即可,在确定好目标值位于第几行后即可在当前行查找是否存在目标值即可(查找这里可以使用二分查找法提高查找效率,这里我偷个懒就不使用二分查找)。给你一个满足下述两条属性的。

2024-06-24 16:41:45 725

原创 力扣424.替换后的最长重复字符

本题考点在于滑动窗口,很多同学在纠结怎么换字符,其实没有必要,简化问题只需要关注窗口内除重复次数最多的元素以外的元素个数即可,此时将这些元素替换就可以得到当前窗口均为重复字符,一旦需要替换的字符超过k值表示当前窗口已经不可以被替换,也就是不满足条件,此时比较当前窗口大小-1与Max_Win的大小,将大的赋值给Max_Win(当前符合条件的最大的窗口长度),最后返回最大的窗口长度Max_Win即可。将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。用两个'A'替换为两个'B',反之亦然。

2024-06-23 17:09:14 225

原创 122.买卖股票的最佳时机Ⅱ

由本题的概述可知,本题是由买卖股票的最佳时机变化而来,这道题目我们可以多次进行股票的买卖,但是有一个限制(我们手中最多持有一只股票,也就是说在买入下一只股票前我们需要把手中拥有的股票给卖出去 这大大的简化了本题的难度),本题,我们可以考虑依次遍历股票的价格,当发现最局部最低价的时候买入股票,在局部最高价的时候卖出股票,直到最后一天即可,也就是累加所有的增区间的浮动值,由于本题思路较为简单,不做过多的阐述,直接附上代码。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。

2024-06-13 16:19:31 346

原创 力扣57.插入区间

本题考察的是数组合并以及数组排序,首先我们需要确定的是,根据题目的意思,我们需要把插入newInterval后重叠的数组部分进行合并,很多同学在这一步会卡着,不知道怎么处理重叠合并这一要求,实际上是把题目想的过于复杂,在插入时既考虑。升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。你可以创建一个新数组然后返回它。按照区间起始端点排序的区间列表。表示另一个区间的开始和结束。个区间的开始和结束,并且。

2024-06-12 16:44:33 379

原创 力扣419.甲板上的战舰

题目进阶版本需要我们使用O(1)的空间复杂度并且不允许修改board中的值,因此我们可以采用查找战舰头部的方法来计算战舰的数量,首先 遍历每一块甲板的时候判断当前甲板是不是战舰 再者,我们需要判断此时是否为战舰的头部(确定是否是战舰的头部的方法很简单 只需要判断当前战舰的左边和上边是否是战舰即可 如果左边和上边均不为战舰则表示当前的战舰是战舰的头部 反之则不是) 如果是战舰的头部则战舰的数量加一即可,最后返回结果值即可。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。

2024-06-11 19:58:46 277

原创 力扣97.交错字符串

本题可以转化成s3中的每一个字符串是否可以由s1或者s2中的字符代替(是否等于s1或者s2中的字符)。这个过程自然是自底向上的从s3的第一个元素开始判断,因此涉及到自底向上的子问题可以考虑使用动态规划来求解该题。第一步首先确定dp,这里很明显有两个状态,状态一:s1中的字符是否等于s3当前的字符 状态二:s2中的字符是否等于s3中的字符,因此需要一个二维数组表示状态。dp[n][m]表示当前位置是否符合要求,符合要求则为true,不符合要求则为false。的定义与过程如下,其中每个字符串都会被分割成若干。

2024-06-07 19:35:00 824 1

原创 力扣72.编辑距离

当我们知道hor转换为ro的编辑距离之后 我们可以很简单的根据hor变换至ro的编辑距离求得hor变换至ros的编辑距离,这是很明显的子问题。首先需要确定的是状态转移方程。dp[i-1][j]为dp[i][j]位置A删除元素的编辑距离-1 dp[i][j-1]位置为A插入元素的编辑距离-1 dp[i-1][j-i]位置为dp[i][j]位修改A元素的编辑距离。因此我们可以得到状态转移方程 dp[i][j] = min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1)

2024-06-07 19:14:34 318 1

原创 力扣209.长度最小的子数组

分别指向窗口的头部和窗口的尾部,为了节约空间,我们可以使用减法来代替求和,当窗口扩容时使用target减去窗口内的新元素值,当差小于等于0时进行窗口缩容 并且此时需要加上窗口尾部的元素,再将窗口尾部向前移动直至窗口内的元素和小于目标值,此时判断当前的满足条件的子数组最小长度与当前的窗口大小+1进行比较(因为我们缩容时是直接缩容至窗口内的元素小于目标值 因此需要将窗口尾部的前一个元素也算进子数组内)。如果不存在符合条件的子数组,返回。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。

2024-06-06 20:04:47 578 1

原创 力扣2938.区分黑球与白球

需要将字符串中的所有1移到字符串的左侧,将字符串中的0移到字符串的右侧,这里只需要返回移动的最小步数即可,不需要关注元素是否真的移动/交换,可以考虑贪心算法,字符串的末尾开始,假设把字符串的尾部依次变成符合要求的元素,只需要找到每次移动的最小步数即可,最后将每次移动的步数累加即可。每次 找到不符合规则的第一个字符,其次找到符合规则的第一个字符,再将符合规则的字符移动至当前不符合的字符位置,此时为将当前元素变为符合要求的元素需要移动元素位置的最小值,使用变量将其累加即可,循环至所有黑球都满足条件即可。

2024-06-06 19:44:43 341 1

原创 setjmp与longjmp

setjmp()会把当前进程环境的各种信息保存进env参数中,调用longjmp()时必须指定相同的env变量来执行“伪”返回。返回值,初次调用setjmp函数的返回值是0,为后续的longjmp跳转设立目标,后面的返回值为调用longjmp后由longjmp函数设置的返回值。参数简介:jum_buf与setjmp中的一致,是存储用于恢复程序运行的相关环境,而其中的value则是设置setjmp的返回值。setjmp()为后续的longjmp()确立跳转目标,该目标是发起setjmp()调用的地方。

2023-12-14 19:56:07 134 1

原创 【Linux】所有者 所属组 其他用户(other)

权限控制

2023-12-12 19:16:41 308

空空如也

空空如也

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

TA关注的人

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