- 博客(20)
- 收藏
- 关注
原创 LeetCode数组篇80删除有序数组
删除重复出现的元素,使得出现次数超过两次的元素。并在使用 O(1) 额外空间的条件下完成。不要使用额外的数组空间,你必须在。评论区大神提供思路,我重新写了。,返回删除后数组的新长度。我是铁憨憨,复杂度高。
2023-08-02 17:52:33
106
原创 LeetCode数组篇79之回溯法
这题类似迷宫,一开始就想到回溯,可是不知道递归结束的标准是什么,看了评论,是用一个变量标记是否找到,如果找到了就停止寻找,如果没有,就一直找,直到所有点都被当做过起点。要注意查找失败时的多个情况,失败时回退,成功时,继续往下找,且要把当前格子标记为已经走过了,回溯时,再标记为没有走过。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
2023-08-02 17:27:52
80
原创 LeetCode数组篇75双指针
类似快排中的一个步骤,设置两个指针left和right用于存放0填满的下标和2填满的下标,两头一起遍历数组,遇到0就加在数组左边,遇到2就加在数组右边,遇到1什么也不做,最后left和right之间的部分就是1.对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。必须在不使用库内置的 sort 函数的情况下解决这个问题。给定一个包含红色、白色和蓝色、共。分别表示红色、白色和蓝色。
2023-08-02 16:46:13
90
原创 LeetCode数组篇74之二分法
题目中的矩阵实质就是一维非递减数组按顺序放进去的,因此可以直接采用二分法查找,这里需要下标简答变换一下即可。给你一个满足下述两条属性的。
2023-08-02 15:51:53
76
原创 LeetCode数组篇64之动态规划
请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。返回dp[m-1][n-1]即可。每次只能向下或者向右移动一步。给定一个包含非负整数的。
2023-08-01 16:59:06
53
1
原创 LeetCode数组篇63之动态规划
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。网格中的障碍物和空位置分别用。
2023-08-01 16:11:28
66
1
原创 LeetCode数组篇62之动态
dp[i][j]=dp[i-1][j]+dp[i][j-1],而在边界的dp[0][j]和dp[i][0]都是值为1,最终返回dp[m-1][n-1]即可。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。但是C/C++里面没有直接算排列组合的函数,只能自己动手啦,这是最简单的动态规划。网格的左上角 (起始点在下图中标记为 “Start” )。一共向下走m-1次,向右走n-1次,答案为。问总共有多少条不同的路径?
2023-08-01 15:35:47
97
1
原创 LeetCode数组篇57之插入区间
有交集时,取两者的并集[min(l1,l2),max(r1,r2)],取并集后不能立即插入,因为这个区间可能还要和后面的区间合并。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。按照区间起始端点排序的区间列表。其他情况都是有交集的。
2023-08-01 15:09:15
91
1
原创 LeetCode数组篇53之动态规划
关键是找到动态规划数组,以nums[i]结尾的最大连续子数组的和为dp[i],那么dp[i-1]大于0时可以加上前面的数组,如果dp[i-1]小于0,就放弃前面的,dp[i]=nums[i];,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。是数组中的一个连续部分。
2023-07-31 10:56:17
47
1
原创 LeetCode数组篇45之贪心法
最开始以为是回溯法,结果超时了,因为我理解成最终要恰好到达,而题意是最后一步可以超出末尾的,看答案意思是要保证每一步跳最多,局部最优达到整体最优,以一次跳为一个单元。只有当走下一步时,才需要更新起点,因此可以进行优化。向前跳转的最大长度。生成的测试用例可以到达。每一轮起点的开始是上一轮起点的末尾,因为。,而起点的末尾是上一轮能到达的最远地方。跳到最后一个位置的最小跳跃数是。只有比上一轮起点远才有走下去的意义。处,你可以跳转到任意。
2023-07-30 20:18:08
76
1
原创 LeetCode数组篇47之回溯法求全排列去重
emmm上一篇还在说数组标记法不好用,这一篇就打脸了,这里不能使用数组交换法,因为交换导致判断是否重复这一环节会出问题,目前还没想到解决办法,所以乖乖用数组标记法啦,先对nums进行排序,方便后面判断是否用过,好难理解,但还是勉强扒拉出来了。2023年7月22日,我刷了三道题,怎么这么难哇,似理解非理解的,快卒了,洗洗睡😭😭😭。给定一个可包含重复数字的序列。返回所有不重复的全排列。
2023-07-22 20:17:41
100
原创 LeetCode数组篇46之回溯法求全排列
回溯法求全排列有两种手段,要么是交换数组元素,要么使用一个标记数组,先看我爱的交换数组元素,上代码~果然不如交换法,我还改了好一会儿~给定一个不含重复数字的数组。看看运行结果,8错8错。
2023-07-22 19:42:00
44
原创 LeetCode数组篇40之回溯法去重
所谓重复,分为树枝上的重复和树层的重复,我们要去的是层上的重复,这是关键,for循环控制的是层,递归控制的是深度,要在层上动手脚,防止层的重复。giao~好难,看了答案,头疼,要长脑子了,勉强理解了。中的每个数字在每个组合中只能使用。给定一个候选人编号的集合。解集不能包含重复的组合。中所有可以使数字和为。
2023-07-22 18:44:06
58
原创 LeetCode数组篇39之回溯法
永远相信官方解答下面评论区的大佬,参考其中一个评论,对代码进行优化,其实上一段代码之所以慢,是因为其对数字的选择和每个数字个数的试探都采用了dfs,而dfs实现方式是栈,数据多时,这个栈被撑得很大很大,不能及时回收,优化思路是,对数字种类的试探采用for循环,对数字个数的试探采用回溯,代码如下啦~用的回溯法,怎么耗时这么长哇,有简单的剪枝,emmm,再瞅瞅。如果至少一个数字的被选数量不同,则两种组合是不同的。又刷了一题哎,又进步了哎,下一题见!,并以列表形式返回。对于给定的输入,保证和为。
2023-07-21 19:03:54
60
1
原创 蓝桥杯 Python 杨辉三角形
蓝桥杯 Python 杨辉三角形第一次代码算出整个三角形,运行超时,只有40分n=int(input())if n==1: print(1) exit(0)f=0a=[[1],[1,1]]for i in range(2,n+3): a.append([1]) for j in range(1,i): a[i].append(a[i-1][j]+a[i-1][j-1]) if a[i][j]==n: pri
2022-03-22 14:17:42
851
原创 蓝桥杯 Python 回形取数1
不知道为什么只能得40分,数大了就读不了,思路是读一个数就删掉,直到删完为止,在线求助m,n=map(int,input().split()) s=[] for i in range(m): li=list(map(int,input().split())) s.append(li) count=0 shu=n;heng=m la=[] while True: #向下读数 for i in range(heng): la.append(s[i][0]) count=count+1 del s[i][0]
2022-03-09 19:32:41
380
原创 蓝桥杯 Python Sine之舞
n=int(input())a1=“sin(”+str(n)+")"s1=a1+"+"+str(n)for i in range(n-1,0,-1):if i%2!=0:s="-"else:s="+"a1=“sin(”+str(i)+s+a1+")"s1="("+s1+")"+a1+"+"+str(i)print(s1)
2022-03-09 18:49:02
1076
1
原创 蓝桥杯 Python 分解质因数
def su(n): s=1 for i in range(2,n): if n%i==0: s=0 break return sli=list(map(int,input().split()))n1=li[0]n2=li[1]susu=[]yinshu=[]for i in range(2,n2): if su(i)==1: susu.append(i)for i in ran.
2022-03-08 13:21:14
7859
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人