自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法记录Day24

思路:用0表示该节点没被监控到,1表示该节点放置了摄像头,2表示该节点被摄像头覆盖。自底向上回溯(若节点为null,认为被摄像头覆盖),若左右节点都被覆盖到,因为自底向上,所以该节点一定没被覆盖;若左右节点有一个没被监控到,说明该节点应该放置摄像头;若左右节点至少有一个有摄像头,则该节点被摄像头覆盖。思路:自后向前遍历,当找到i位置的数字大于i+1位置时,将i位置的数字-1,i+1位置数字变成9。

2023-05-11 23:04:50 22

原创 算法记录Day23

思路:本题思路与昨天射箭引爆气球思路类似,当第二个区间的左端小于第一个区间的右端时,这时两区间只能留下一个,两区间右端取较小的为R,若第三个区间的左端也小于R,则三个区间只能留下一个...反之,以其右端为基准,继续寻找能留下的区间个数。思路:遍历字符串,对字符串中每种字符的最远下标进行记录。再对字符串进行遍历,遍历时更新当前已遍历的字符的最远下标,当遍历位置达到该下标时,说明找到题目要求的一个字符串片段。思路:与无重叠区间思路类似,但由于要合并所有重叠区间,所以end更新要更新为右端的最大值。

2023-05-10 23:33:43 17

原创 算法记录Day22

所以我们应该对h相等的人,进行k的降序处理,若不如此做,假设[h1,k1],[h1,k1+1]对于上面的逻辑,会导致[h1,k1]在前,[h1,k1+1]再加入会再数k1+1个空位,而题意中的k值为高度h大于等于,即[h1,k1]是包含在k1+1个空位中的,故应降序排。存下重叠气球的最小的最右边界R,作为这一箭可以引爆的边界,与下一个气球的最左边界L比较,若L>R则说明这一箭引爆不了该气球,需要增加一只箭。h相同,k升序,若不如此,先插入大k,后插入的小k在其前面,出错。

2023-05-10 20:46:07 20

原创 算法记录Day21

思路:对数组排序,将绝对值最大的负数在K>=0的情况下取相反数。若k此时不为0,若K为偶数,不用管(可以将正数来回反转,数组值不变);若k为奇数,将数组排序,把最小值反转一次。思路:局部最优:当前oil = gas[i]-cost[i]累加和一旦小于0,则起始位置一定至少为i+1。全局最优:找到跑一圈的起始点。方法一:回溯(超时)方法一:暴力(超时)方法二:递归(超时)

2023-05-08 22:36:09 19

原创 算法记录Day20

思路:因为prices[3] - prices[0]相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。思路:需要curMax来记录当前这一步能跳到的最远距离,当i走到当前这一步能跳到的最远距离,便需要跳下一步,同时更新curMax为max,因为max为上一轮curMax中所能到的最远距离。思路:dp[i][0]表示第i天没持有股票,dp[i][1]表示第i天持有股票。

2023-05-07 13:28:48 12

原创 算法记录Day19

思路:确定dp[i]的含义:包含下标i的最大连续子序列的和。而dp[i]可以来源于:1、num[i]从当前元素计算最大连续子序列和2、dp[i-1]+num[i]nums[i]即加入当前连续子序列和。思路:因为连续和为负数时,便会减小下一个元素单独计算时的和。所以,当连续和为负数时,便重新计数。思路:对俩数组先排序。从小到大遍历饼干,对于该饼干,能否满足目前最小胃口的人。即对小胃口的人,优先用小饼干去满足。思路:排序后,从大到小遍历胃口,对于该胃口,能否用剩余饼干中最大的来满足,即大饼干优先满足大胃口。

2023-05-05 15:47:01 16

原创 算法记录Day18

内部循环逻辑为:从头遍历所有机票,因为已经排序,所以找到第一个机票出发点与行程最后一站相同且没用过的机票,加入行程,并标记为已使用。接着进行回溯递归,若递归返回true,即找到了答案,便接着向上返回。思路:找到唯一解,因此要有布尔返回值,递归要遍历棋盘所有格子,当遇到‘.’字符时,开始处理:将‘1’-‘9’循环放入该格子,若合法则递归处理下个‘.’格子。思路:将所有机票按照目的地进行排序,若按照出发点排序,会导致相同的出发点如JFK,可能会找到字符较大的目的地,同时我们需要对已经使用过的机票进行标记。

2023-05-04 18:30:04 52

原创 算法记录Day17

思路:中序遍历,遇到p或q节点直接返回,否则返回null。记录向左递归得到的返回值left,向右得到的right。若left不为null,返回left,同理返回right。若二者都不为null,则该节点为公共祖先,直接返回。思路:在中序遍历的时候,记录前一个节点与当前节点的值,若前一节点与当前节点值相同,用count记录并加一,否则,重新计数。当count大于最大次数时,清空list,并将元素存入。思路:中序遍历,得到有序数组,对有序数组求前后两数的最小绝对差。可以用递归,也可以迭代。

2023-04-25 16:46:16 36

原创 算法记录Day16

思路1:根据二叉搜索树定义,从小到大顺序为左中右,因此可以根据根节点大小确定左右子树的区间范围,进行递归判断。思路:遍历数组找到最大的元素及其下标,将其设为当前节点,递归该元素下标的左边为节点的左子树,右子树亦然。思路2:中序遍历,二叉搜索树定义,从小到大顺序为左中右,每遍历一个节点更改max的值。否则将左右节点值相加并返回,其左右子树分别向左向右递归。

2023-04-24 21:03:31 18

原创 算法记录Day15

向左向右递归,递归终止条件为当前节点为叶子节点,若当前深度大于最大深度时,最大深度值变为改前深度,并记录当前节点值为返回结果,否则直接返回。事实上,可以用一个临时的值,在遍历每一层元素时,将队列size第0个元素保存,覆盖到最后即为最后一层的值。思路:每经过一个节点,将target的值减去当前节点的值,递归到叶子节点时,与叶子节点的值比较,若相等返回true,否则为false。思路:后序遍历的末尾为树的根节点,根据根节点代入中序遍历,根节点左边为其左子树,右边为其右子树。

2023-04-24 11:16:29 14

原创 算法记录Day13

104.二叉树的最大深度。

2023-04-20 20:53:37 15

原创 算法记录Day12

思路:比较树的内侧与外侧,判断不对称的情况,将内侧与与外侧的节点依次放入队列中,每次分别弹出内侧与外侧节点。思路:要比较树的外侧与内侧,列出不对称的几种情况,对外侧内侧分别递归,当外侧内侧都对称时,二叉树对称。思路:终止条件为当前节点为null,否则交换当前节点的左右子节点,然后向左、向右递归。思路:利用层序遍历进行交换。

2023-04-19 15:17:58 19

原创 算法记录Day11

二叉树递归遍历class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); preorder(root, result); return result; } public void preorder(TreeNod

2023-04-18 10:39:29 17

原创 算法记录Day10

思路:最大的元素放在队列头,向队列添加元素时,若比队列尾部的元素大,则将队尾的元素弹出,直到要加入的元素小于队列尾部元素,将其放入队尾。i < k;if (!while (!

2023-04-17 16:00:36 16

原创 算法记录Day09

20. 有效的括号思路:因为越早遇到的左括号,需要后面的右括号来匹配,所以想到用栈来考虑。遇到左括号,栈中放入对应的右括号,遇到右括号就与栈顶元素匹配,若匹配则弹出,否则若栈为空或者不匹配,返回false。遍历完最后判断栈是否为空,防止出现左括号多的情况。1047. 删除字符串中的所有相邻重复项。

2023-04-16 15:55:09 16

原创 算法记录Day08

【代码】算法记录Day08。

2023-04-14 15:17:45 18

原创 算法记录Day07

思路:先将串中的左右空格与单词间多余的空格删去,将删去后的字符串以空格分隔,用stringbuilder反向添加,将最后的多余空格删去。思路:将字符串转为字符数组,for循环每次往后推2k个字符,循环中若所剩字符数大于等于k,则反转前k个字符,否则,把剩余字符全反转。思路:创建stringbuilder,若s中遇到空格加上%20,否则加上该字符。思路:利用stringbuilder删除前n个字符,在尾部添加。思路:左右指针进行交换。

2023-04-13 19:45:36 15

原创 算法记录Day06

定义左右指针,因为数组已经排序,当第一个数与左右指针指向的数相加与0比较,若和大于0,则数大了,可以左移右指针,反之,右移左指针。思路:四个数组,两两分组,将两个数组的各个元素的和存在map中,key为元素的和,value为该和的次数,另外两个数组各元素的和与map中的key相加为0,将对应value累加,即为返回值。思路:因为两字符串都由小写字母构成,所以用数组记录magazine字母出现次数,ransom中的字母每出现一次,对应数组中的值减一,若数组中值出现小于0 的,则返回false。

2023-04-12 19:03:48 16

原创 算法记录Day05

思路:先将第一个字符串的各字符放入map中,key为该字符,value为字符出现的次数。将第二个字符串的字符放入map中,每一次将字符对应的value减一,最后统计map 的value,若为有效字母异位词,则value应该全为0,否则不是也可以将第三个for判断的思路放入第二个for中,但判断条件要变化对于本题,因为只有26个字母,所以可以用数组来代替map。

2023-04-11 20:23:03 21

原创 算法记录Day04

24、两两交换链表中的节点。

2023-04-10 21:19:05 24 1

原创 算法记录Day03

707、设计链表链接:力扣class MyLinkedList { int size; ListNode head; public MyLinkedList() { size = 0; head = new ListNode(0); } public int get(int index) { if(index>=size||index<0) { return -1

2023-04-07 22:02:03 19 1

原创 算法记录Day02

乍一看没想明白,思路是,移动right指针,当left与right间的和大于target后,在前移left,sum要减小,继续与target比较,得到当前的最小res。再次移动right,继续操作。这题写的很痛苦,边界条件要搞明白,第一轮每边只放n-1个数,每轮循环少一个,所以用offset计数,用count当每个位置的计数器。循环轮数也没想出来,为n/2。最后当n为奇数时,要给中间元素赋值。左右两端的平方一定是最大的,所以比较左右两端的平方值,放在新数组的末端。

2023-04-06 20:41:11 142 1

原创 算法记录Day01

704. 二分查找704. 二分查找题目描述:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回 -1。

2023-04-05 22:01:29 356 2

空空如也

空空如也

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

TA关注的人

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