自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 D41|打家劫舍

2.确定递推公式决定dp[i]的因素就是第i房间偷还是不偷。如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。如果不偷第i房间,那么dp[i] = dp[i - 1],即考 虑i-1房,(然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);

2024-01-10 17:18:27 836 1

原创 D42&&D43&&D44|买卖股票的最佳时机

暴力解法,两个for循环。会超出时间限制。

2024-01-10 15:35:19 891

原创 D51+D52|接雨水

单调栈问题入门,找一个元素右边第一个比该元素大的值时考虑使用单调栈,从栈顶到栈底如果是递增趋势(加入的元素是比peek()小的)。找右边第一个元素比该元素值大时为相反情况。需要注意的是,此处我们需要在栈中存放的数值是数组下标。与上一题相同,一些区别是因为无需考虑数组下标,栈中可以直接存放元素,因为数组之中没有重复元素,所以可以在数组2中寻找完然后再用map对应到数组1中。这个系列中最简单的一道,循环的部份用取余处理。

2024-01-08 16:40:32 906

原创 D50|单调栈

暴力解法但是会超时。

2024-01-04 22:54:16 425

原创 D49|动态规划之回文子串

首先复习一下,回文串是正读和反读都是一样的字符串。

2024-01-03 23:38:40 786

原创 D48|动态规划之编辑距离

大概能想到定义dp数组为最少的删除次数想不明白递归公式应该怎么推导。

2024-01-02 13:38:30 1138

原创 D47|动态规划-子序列part2

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1]

2024-01-01 14:55:21 888

原创 D45&&D46|动态规划之子序列问题

动态规划五部曲:1)dp数组的定义,dp[i]表述数组第i个元素大于前面几个值;2)dp数组的迭代,min = nums[x]表示递增数组中的最后一个值,如果nums[i]>min;3)初始化 dp[0] = 14)顺序:前序;5)遍历:有点不对,5和3那里有点不对劲,先试试。无法正确通过,所以题解不正确。

2024-01-01 11:23:47 862

原创 D40|单词拆分+多重背包

给你一个字符串s和一个字符串列表wordDict作为字典。请你判断是否可以利用字典中出现的单词拼接出s。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用true返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。

2023-12-23 16:15:51 381

原创 D38&&39|完全背包

完全背包:首先01背包的滚动数组中的解法是内嵌的循环是从大到小遍历,为了保证每个物品仅被添加一次。同时找到规律,如果存在后序遍历(比如01背包的滚动数组)的话,两个for循环的顺序就不可以变,但如果都是正序的话,两个for循环的顺序就可以进行改变。

2023-12-23 14:44:12 1849

原创 D36|背包问题

从图中我们可以看出背包问题主要涉及01背包完全背包、多重背包和分组背包。

2023-12-19 16:18:23 885

原创 D35|整数拆分+不同的二叉搜索树

一开始需要推导递推公式也就是需要找规律:我认为的规律是dp[0] = 1;dp[1] = 1;dp[2] = 2;

2023-12-18 14:25:15 409

原创 D31&&32|贪心算法

我的思路就是如果有两个区间重叠,保留end比较小的那个区间,删除end比较大的区间。

2023-12-17 22:23:49 1815

原创 D34|不同路径

1)确定dp数组以及下标的含义:dp[i][i]存放到第i+1行和第i+1列的方法数2)确定递推公式:3)dp数组如何初始化第0行是1;第0列是1;4)确定遍历顺序从前到后5)举例推导dp数组。

2023-12-16 22:15:53 365

原创 D33|动态规划!启程!

1)确定dp数组(dp table)以及下标的含义2)确定递推公式3)dp数组如何初始化4)确定遍历顺序5)举例推导dp数组。

2023-12-16 21:14:26 419

原创 D30|继续贪心

别太贪心了,做出一道贪心就应该知足呜呜呜。

2023-12-12 12:14:22 361

原创 D29|贪心难难难

第一步:将数组按照绝对值大小从大到小排序第二步:从前向后遍历,遇到负数将其变为正数,同时K--(把大的负数先变正数)第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完(再把绝对值小的变负数)第四步:求和将数组按照绝对值大小排序的代码也需要注意一下!!!!

2023-12-11 12:16:49 401

原创 D25|递增子序列&&全排列

一开始的思路比较偏向于这道题是子序列(判断递增)+去重(used数组)

2023-12-10 11:55:14 344

原创 D28|买卖股票的最佳时机+跳跃游戏

覆盖范围 = i+nums[i].i 每次移动只能在 cover 的范围内移动,每移动一个元素,cover 得到该元素数值(新的覆盖范围)的补充,让 i 继续移动下去。

2023-12-10 10:41:24 452

原创 D27|贪心算法,对不起想做出贪心问题我真是贪心

好久没有这种一道题都做不出来的崩溃了。。。

2023-12-08 14:31:42 839

原创 D24|复原IP地址、子集问题

回溯三部曲:1)输入输出:输入nums数组,因为是在一个集合中处理问题,所以需要startindex。输出void2)结束条件:path中是否有元素均可添加进result数组,但此时不要return,不然后面全部无法执行。最后startindex>nums.length()再进行return;3) 单层循环:同之前一样往其中添加元素即可,变化的只有结束条件。

2023-12-05 20:49:56 400

原创 D23|回溯中的去重

在处理组合问题的时候,递归参数需要传入startIndex,表示下一轮递归遍历的起始位置,这个startIndex就是切割线。

2023-12-04 14:37:14 910

原创 D21&&D22|开始回溯

1.什么是回溯:回溯法是一个纯暴力的搜索方式,有时候一些问题只能靠回溯暴力法来解决2.适用于什么问题:1)N个数里面按一定规则找出k个数的集合2)一个字符串按一定规则有几种切割方式3)一个N个数的集合里有多少符合条件的子集4)N个数按一定规则全排列,有几种排列方式5)N皇后,解数独等等3.回溯法模板)回溯返回值以及参数返回值一般是void参数一般是根据题目需要再进行确定2)回溯函数终止条件。

2023-12-02 19:23:12 959 1

原创 D20|继续BST!

递归三部曲:(1)输入输出输入是根节点,最小值和最大值输出是修剪后的根节点(2)结束条件如果当前节点为null,return root(3) 单层递归条件如果根节点数值小于low,就代表我的这个根节点是要被修剪掉的,其左子树肯定也是小于low的,所以也要被修剪掉,但是右子树是否小于val是位置的,所以去修建根节点的右子树根节点数值大于low的情况同理。

2023-11-30 22:27:34 328 1

原创 D19|BST的最近公共祖先、插入节点和删除节点

首先其处理思路可以仿照二叉树寻找公共祖先。如何利用二叉搜索树特性来处理此问题,我想的是如果其中一个数值小于当前节点,另一个数值大于当前节点,那么该节点就是最近公共节点,相较于二叉搜索树可以不用遍历去寻找这个节点本身了。递归三部曲:1)确定输入和输出2)确定终止条件 如果当前节点为空,return root3)确定单层循环条件,如果当前节点的数值是在区间之内的就return root,这个就是最近公共祖先。如果没在区间之中就搜索左边,左边有返回值就返回,不然就搜索右边,右边有返回值就返回。

2023-11-29 20:40:48 380 1

原创 D18|二叉搜索树的最小绝对差、众数、二叉树的最近公共祖先

搜索中序遍历!!!!!

2023-11-28 16:39:13 723

原创 D17|最大、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树

617.合并二叉树654.最大二叉树。

2023-11-27 22:17:05 892 1

原创 D15+D16|递归好难!!!

其处理方法分为:1)按普通树来处理2)按完全二叉树来处理1)按完全二叉树来处理,我们可以按照其特性,寻找其中的满二叉树,然后满二叉树的计算规则2^n-1,再加上根节点的。2)如何判断是否为满二叉树判断其向左递归的深度和向右递归的深度是否相等。1)使用位运算计算2的n次方,从而depth是从0开始的2)递归三部曲:a.输入输出:输入根节点,返回根节点下所有节点的数目。

2023-11-25 18:05:04 932

原创 Day14|二叉树的最大深度和最小深度,完全二叉树的节点

二叉树的最大深度和最小深度昨日已完成(跳过了迭代法)

2023-11-23 23:23:12 377

原创 Day13|二叉树的层序遍历+翻转+对称

这里主要看了借助队列的方式1.new一个新的队列2.如果根结点不为空的话,将结点添加进队列中3.当队列不为空时进入循环首先设置变量记录当前队列的size,此处记录了每层的元素个数,也决定了下一个循环循环几次,当size>0时记录将这一层的每个结点值添加进list中,将这一层节点的左右结点添加进队列。在进入下一层循环之前,new一个list,最后将这个list添加进结果list中相对于102.二叉树的层序遍历,就是最后把result数组反转一下就可以了。

2023-11-22 20:07:36 28

原创 Day12|二叉树的遍历方式

先将左全部遍历,到1后,1左为空,弹出1,result中添加1的数值,cur指向1右,1右为空,弹出4,result中添加4的数值,cur指向4右。这部分只需要在method中调整添加节点的顺序即可,其中前序是根左右,后序是左右根,中序是左根右。这部分一定要结合网站上的动画1进行理解。

2023-11-21 15:15:46 19

原创 Day11|栈与队列03

栈的经典问题:偏向于进行匹配1.括号匹配问题2.字符串去重问题3.逆波兰表达式问题队列的经典问题:1.滑动窗口内的最大值(单调队列2.求K个高频元素(优先级队列java中stack,queue 是容器么?(是?我们使用的stack,queue是如何实现的?(stack类 LinkedList类))stack,queue 提供迭代器来遍历空间么?(提供?

2023-11-20 17:31:06 45 1

原创 Day10|栈与队列02

书写代码时,遇到{(【分别存入})】,如果此时是}判断栈顶是否为},如果不是return false,此时对应了左右括号数目相同但不匹配的情况,如果此时是}但是栈为空,对应了右括号多了的情况。有了上一题作为铺垫就很好想了,遍历数组,如果栈空就将元素push进去,栈不空判断是否跟栈顶元素相同,不相同就push,相同就将栈顶pop出来。循环完毕,如果此时栈不为空,则对应了左括号多了的情况。运行可以通过,无法AC,忽略了“{[]}”如果碰到左括号,判断是否下一个为右括号。然后用一个新数组装栈内元素并反转。

2023-11-18 14:46:43 25 1

原创 Day08&&Day09|复习&&栈与队列01

2)虽然pop和peak思路相近,可以复用pop的代码,但是因为是peak我只需要知道队头的数据是什么,但是不需要让他出来,所以调用pop后还需要将元素push回去。但是没有AC,开始寻找问题出现在哪里,存入的顺序是1,2,3,4,2,但是按照我的逻辑pop就会2,2,4,3,1。栈pop的应该是最后存入的,但是在队列中最后存入的会最后出,所以在pop中先弹出最后一个前面的那些,然后在存入,这样我再弹出的就是我想要的。1)必须首先判断栈2是否为空,再将栈1元素存入栈2,不然输入输出的顺序就会被改变。

2023-11-17 18:54:43 28 1

原创 Day07|String

很基础的题目,没什么好说的,跟题解的唯一区别在于我是start<=end,偶数时没有什么影响,奇数时start和end指针指向同一个元素并且交换的操作没什么意义,所以还是写为start<end比较好。

2023-11-15 15:29:19 33 1

原创 Day06|哈希part02

暴力解法!四重循环!但是无法暴力,暴力会超出时间限制。

2023-11-14 14:40:58 31 1

原创 Day05|哈希章节

遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法。

2023-11-13 14:39:41 24

原创 Day04|两两交换链表中的节点+删除链表的倒数第N个节点+链表相交+环形链表II(魔鬼)

拿到今天的题目之后,看到提示用虚拟头节点会简单很多,心中默默记下一定要使用虚拟头节点哈哈哈!然后就是画图思考整个的交换过程首先排序head=null和head.next=null的情况这个时候直接返回head不进行交换,然后考虑交换,交换过程如图所示,首先pre.next = next;在进行第二步交换时首先需要保存next.next不然就会找不到这个节点,将next.next赋值为cur,cur.next=temp之后再填写while中的条件。

2023-11-12 18:32:05 118 1

原创 Day03|移除链表元素+反转链表+设计链表(输)

1)关于链表移除元素最需要注意的关键点在于:pre是cur前一个节点,cur是当前节点,next是cur的下一节点,想要删除cur节点,需要让pre.next = cur.next;

2023-11-12 17:28:56 137 1

原创 D02|有序数组的平方+长度最小的子数组+螺旋矩阵

开始螺旋,每转一圈起始的位置会变,结束的位置也会变,所以需要修改startx,starty和offset。return涵盖了整个数组长度都不满足要求返回0的情况。就是不管我这个数给你多少,你每条边的处理规则都不能变!所以在此规定左闭右开,这样每条边遍历的规则都是相同的。同时要考虑奇数转完相应的圈数还会有一个数值没填。定义偏移量,会影响左右边界;关键点2:也就是螺旋的思路。定义圈数,圈数是n/2;关键点1:循环不变原则。

2023-11-09 14:03:09 422 1

空空如也

空空如也

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

TA关注的人

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