- 博客(80)
- 收藏
- 关注
原创 Hot100 8-12(滑动窗口+子串)
给定一个字符串s,请你找出其中不含有重复字符的的长度。3因为无重复字符的最长子串是 "abc",所以其长度为 3。
2025-02-26 16:06:43
541
原创 Hot100 Java之Acm模式 4-7(双指针)
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。移动到数组的末尾,同时保持非零元素的相对顺序。注意,输出的顺序和三元组的顺序并不重要。轴共同构成的容器可以容纳最多的水。
2025-02-25 20:37:13
583
原创 Hot100 Java之Acm模式 1-3(哈希)
找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。最长数字连续序列是 [1, 2, 3, 4]。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。整数,并返回它们的数组下标。给你一个字符串数组,请你将。你可以按任意顺序返回答案。给定一个未排序的整数数组。,请你在该数组中找出。
2025-02-25 16:30:06
401
原创 代码随想录:单调栈4-5
给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。6上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。9。
2024-09-17 21:03:19
283
原创 代码随想录:单调栈1-3
给定一个整数数组,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。
2024-09-10 14:56:58
614
1
原创 代码随想录:动态规划52-54
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。6个回文子串: "a", "a", "a", "aa", "aa", "aaa",找出其中最长的回文子序列,并返回该序列的长度。一个可能的最长回文子序列为 "bbbb"。三个回文子串: "a", "b", "c"是字符串中的由连续字符组成的一个序列。一个可能的最长回文子序列为 "bb"。是正着读和倒过来读一样的字符串。,请你统计并返回这个字符串中。
2024-09-06 16:10:47
266
原创 代码随想录:动态规划49-51
给定两个单词word1和word2,返回使得word1和word2所需的。可以删除任意一个字符串中的一个字符。2第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"4。
2024-09-05 11:42:47
431
1
原创 代码随想录:动态规划45-48
以示例2,bag+babgbag为例,把二维dp的状态转移表画出来,根据例子理解递推公式和初始化。直接考虑什么删除不删除的很难理解。
2024-09-04 11:41:49
413
原创 代码随想录:动态规划41-44
是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。最长递增子序列是 [2,3,7,101],因此长度为 4。最长公共子序列是 "ace" ,它的长度为 3。最长连续递增序列是 [1,3,5], 长度为3。长度最长的公共子数组是 [3,2,1]。
2024-09-03 11:43:07
461
原创 代码随想录:动态规划37-40
给定一个整数数组prices,其中第prices[i]表示第i天的股票价格。设计一个算法计算出最大利润。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。3对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
2024-09-01 15:22:14
352
原创 代码随想录:动态规划32-36
随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。同时,你不能在买入前卖出股票。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
2024-08-30 15:44:53
993
原创 代码随想录:动态规划29-31
成环的情况首尾元素不能同时偷,因此,单独分两种情况考虑,一种是考虑前面的肯定不偷尾元素,一种是考虑后面的肯定不偷首元素,然后两者取最大值。
2024-08-29 14:14:12
351
原创 代码随想录:动态规划22-28
原理就是完全背包问题的组合种类数,这里的台阶[1,2,3...,m],其实每一种台阶就是一个物品,台阶总数就是背包容量,计算走完台阶的组合数,就是n=台阶总数,m=物品个数。求兑换硬币的最小个数,也是一个完全背包问题。特殊点在于,递推公式dp[j] = Math.min(dp[j], dp[j-coins[i]] + 1),如果不取就是dp[j],如果取物品i就是dp[j-coins[i]] + 1。因为递推公式用的是min,所以初始化时,除了dp[0]都要初始化成Integer.MAX_VALUE。
2024-08-28 14:21:19
724
原创 代码随想录:动态规划18-21
完全背包,求背包的价值最大。用一维数组做,其实就是在01背包一维解法的基础上,把遍历背包的顺序由倒序改为正序,因为倒序时每个物品只能取一次,但是正序时,dp[j]会迭代更新旧值,同一个物品可以多次取。至于两个for循环,在这里可以交换,是因为二维的状态图画出来,可以发现,按行更新和按列更新结果是一样的,因为正序情况下,dp[j]是由上面和左上方递推过来的,for循环交换不影响。重点是理解完全背包求装满的组合数时,是要按行遍历的(先物品后背包),把加入物品0,再考虑物品1。
2024-08-27 16:18:49
643
原创 代码随想录:动态规划16-17
其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"}。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3。最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。最大的子集是 {"0", "1"} ,所以答案是 2。返回可以通过上述方法构造的、运算结果等于。,然后串联起所有整数,可以构造一个。的最大子集的长度,该子集中。向数组中的每个整数前添加。给你一个非负整数数组。
2024-08-26 19:20:47
288
原创 代码随想录:动态规划11-15
有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x
2024-08-20 11:42:03
294
原创 代码随想录:动态规划6-10
一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?28。
2024-08-19 09:47:47
355
原创 代码随想录:动态规划1-5
(通常用F(n)表示)形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定n,请计算F(n)。
2024-08-18 10:29:03
320
原创 代码随想录:贪心22-23
当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是的。给定一个整数n,返回小于或等于n的最大数字,且数字呈。
2024-08-12 07:12:45
249
原创 代码随想录:贪心20
以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
2024-08-10 11:42:56
168
原创 代码随想录:贪心19
给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。返回一个表示每个字符串片段的长度的列表。[9,7,8]划分结果为 "ababcbaca"、"defegde"、"hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。
2024-08-10 11:17:06
258
原创 代码随想录:贪心18
找移除区间的最小个数,就是找最少的重复区间,就当删除区间的覆盖范围尽量大一些。如果i的左区间大于等于i-1的右区间,说明i-1和i不重叠,不用删。如果i的左区间小于i-1的右区间,说明重叠i-1和i重叠了,重叠区间个数count+1,同时,为了下一步继续判断i+1和上面的区间是否重叠,需要更新i的右区间为i-1和i右区间的最小值。
2024-08-10 10:18:21
227
原创 代码随想录:贪心17
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 ,其中 表示水平直径在 和 之间的气球。你不知道气球的确切 y 坐标。一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 处射出一支箭,若有一个气球的直径的开始和结束坐标为 ,, 且满足 ,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。给你一个数组 ,返回引爆所有气球所必须射出的 最小 弓箭数 。示例 1:输入:points = [[10,16],[2,8],[1
2024-08-10 09:25:18
325
原创 代码随想录:贪心14
两次贪心,第一次根据people的身高h进行降序,身高若相同再按照k升序排序。这样可以保证p前面的所有p的身高都大于等于p本身。然后就能根据p的k将其插入索引k,第二次遍历排序后的people,根据p[h][k]的k,将每一个p插入链表的索引p位置。最后,将链表转为数组返回。
2024-08-10 08:42:53
353
原创 代码随想录:贪心11-13
首先,我们核心要关注的是gas和cost的剩余量rest。用totalsum统计走完一圈的rest之和,如果为负数,说明无论从哪个位置开始,油都是不够的,返回-1。如果totalsum>=0,说明存在一个合适的起始位置,那么要如何找这个起始位置呢。我们要定义一个index表示起始位置,初始值为0,表示我们假设起始位置是0,再定义一个tmpsum,用于计算从index开始往后的的rest和,初始值为0。以rest=1 1 3 -6 1 为例。
2024-07-04 12:17:54
745
原创 代码随想录:贪心8-9
用cur记录当前走的步数最大覆盖的范围,用next记录下一步的最大覆盖范围,用count进行跳跃次数统计。如果next到了序列最后,说明在当前步数基础上,再走一步就到了最后了,count+1后,直接跳出for循环返回结果就行。如果next没到最后,说明还需要继续往后遍历i。如果i!=cur,说明当前count的覆盖范围下,i还能往后再看看,更新一下当前count对应的cur覆盖范围的最大next。
2024-07-03 12:10:44
708
原创 代码随想录:贪心6-7
对于一个股票值12345,我们只用关注正收益值,而不用关注其对应的区间,把12345计算出对应的profit1111,只要收益是正的,就加入res。我们主要关注跳跃的覆盖范围能否到达数组最后,而不用关注是怎么跳跃过去的,而覆盖范围比如23114,遍历2,可以覆盖到0+2,cover=2,遍历3,可以覆盖到1+3,cover=4,到达数组最后,返回true。对于32104,遍历3,覆盖到0+3,cover=3,遍历2,覆盖到1+2,cover=3,遍历1,覆盖。
2024-07-02 21:13:24
477
原创 代码随想录:贪心2-4
两种逻辑,一种是控制胃口,从大到小分,一种是控制饼干,从小到大分。1、控制胃口,从大到小分用for控制胃口1357的原因是,从大到小,对每一个小孩找饼干246。如果有足够大饼干就他,没有的话这个小孩就被轮空不吃。小孩的胃口不管有没有满足,都需要找下一个小孩子了。比如第一个小孩胃口7,饼干6满足不了,他就被轮空吃不到,for循环i--,找下一个胃口小孩。但是饼干没有分出去还是指向6。2、控制饼干,从小到大分用for控制饼干1357的原因是,从小到大,对每一个饼干找小孩246。
2024-07-02 10:43:01
778
原创 代码随想录:回溯20-21
树的每一层row代表棋盘的一行,里面的for循环代表棋盘的一列。row从0开始,当row到达n,说明走出棋盘了,作为叶子节点可以收集结果。如果某个位置设置为Q,加入棋盘后导致棋盘不合法(同行、同列、同斜线),就要剪枝,但是剪枝是需要知道当前位置的row和col,所以把剪枝写在for循环里面,只有当前位置合法,才修改成Q,然后递归下一行row+1。如果不合法,直接跳过当前col,进入for循环的下一层循环。判断位置是否合法,需要判断同列、同斜线,其中同斜线有两种情况,不要漏了。
2024-06-14 18:00:42
978
原创 代码随想录:回溯19
优先队列可以保证让我们找到字典序最小的路径。这道题用回溯操作嵌套的map,代码会很难写,而且容易超时,用深度优先+map+优先队列是最好理解的。以下图为例。首先,从JFK开始获取到它的优先队列pq={ATL,SFO},ATL是队首元素,说明ATL是JFK的字典序最近到达点,因此路径JFK-ATL。此时JFK的pq={SFO}然后,从ATL开始获取它的优先队列pq={JFK,SFO},JFK是队首元素,说明JFK是ATL的字典序最近到达点,因此路径JFK-ATL-JFK。此时ATL的pq={SFO}
2024-06-12 12:01:36
613
原创 代码随想录:回溯14-17
和子集类似,也要收集处理叶子节点之外的节点。和子集不同的是:①子集要收集所有中间节点,而这里是收集递增子序列,所以path长度到2才能开始收集,且当序列不递增的情况也不能收集,比如4767,path长度为1的第一层树高节点不用收集,path=47,继续收集67时,476不递增也不能收集。②子集的去重可以靠sort+前后元素比较进行去重,但由于这里找的是递增子序列,sort之后会破坏原来的序列,比如4767排序之后会收集出4677,这个应该是没有的。
2024-06-11 11:50:54
819
原创 代码随想录:回溯5-8
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
2024-06-05 11:02:23
423
原创 代码随想录:回溯算法2-4
其实就是用一个树来模拟我们手动进行组合数字的过程。(假设n=4,k=2)A.先考虑for循环,从[1-n]遍历,其实就是先选第一个数字1,path里面放了1,选完第一个数字add之后,执行backTracking(n,k,2),过程如下。①递归[2-n],i=2,选择第二个数字2,path里放了12。选完第二个数字之后,递归[3-n],这时因为path里有2个元素了,直接进入终止条件,把path12加入res然后直接return。
2024-06-04 11:19:27
411
原创 代码随想录:哈希表相关题目推荐(49、438、350)
给你一个字符串数组,请你将组合在一起。可以按任意顺序返回结果列表。是由重新排列源单词的所有字母得到的一个新单词。strs =
2024-05-21 12:37:25
328
原创 代码随想录:螺旋矩阵II相关题目推荐(54、LCR146)
给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix。n = 3。
2024-05-14 10:29:51
456
原创 代码随想录:长度最小的子数组相关题目推荐(904、76)
题目看着很绕,其实就要找一个最大的连续数组(数字种类小于等于2)而已。查找方法就是用滑动窗口,left和right固定。然后,right遍历水果数组,把right种类put到哈希表中(key是水果种类,value是出现次数)。map存储的是当前left和right窗口中的水果种类和对应的数量。如果map的大小>2,即水果种类大于2,就要缩小窗口,修改map,map中key为left的value减1。如果value为0,直接把left从map中remove。然后,left右移,直到size小于2。
2024-05-13 12:14:00
620
原创 代码随想录:移除元素相关题目推荐(26、283、844)
核心是快慢指针,快指针进行遍历,指向带判断的元素,slow指向前一个被插入的元素,用于和fast进行比较。如果相同,fast往后走,如果不同,把fast插入slow+1位置,slow后移,fast后移。核心还是fast和slow指针。fast指向带判断的元素,对nums进行遍历,slow指向待插入元素的位置。如果fast是0,fast++后移继续判断。如果fast不是0,就把fast插入slow,然后slow后移指向新的待插入元素位置,fast后移继续判断。
2024-05-10 10:15:15
584
《网络编程综合实践》:高校爬虫(厦大,南理,华大)源代码
2022-11-02
《网络编程综合实践》:高校爬虫(厦大,南理,华大)excel保存
2022-11-02
《网络编程综合实践》:高校爬虫(厦大,南理,华大)实验报告
2022-11-02
操作系统实验全代码,用Python实现
2022-11-02
信息系统安全实验9,页数30
2022-11-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人