- 博客(72)
- 收藏
- 关注
原创 python力扣240.搜索二维矩阵Ⅱ
编写一个高效的算法来搜索矩阵 matrix 中的一个目标值。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]],target = 5输出:true示例 2:输入:matrix =[[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20。
2025-04-02 12:44:27
431
原创 python力扣48.旋转图像
一种完全由我原创的笨方法:通过观察发现,如果将旋转后的矩阵每一列翻转,那么原矩阵的[ i ][ j ]位置元素在旋转后会出现在新矩阵的[ j ][ i ]位置。也就是说,当你修改某一行时,所有行都会受到影响。输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]。
2025-03-31 12:27:18
391
原创 python力扣54.螺旋矩阵
思路比较直接:从左到右遍历第一行,从上到下遍历最后一列,从右到左遍历最后一行,最后从下到上遍历第一列。输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]list.extend可以添加一个列表的元素,而list.append只能添加单独的元素。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]输出:[1,2,3,6,9,8,7,4,5],返回矩阵中的所有元素。
2025-03-28 13:13:53
208
原创 python力扣73.矩阵置零
注意:在置零时的先后顺序,如果先处理了第一列和第一行,然后再处理其他位置的元素。2.遍历 matrix[1:M][1:N] 看当前位置是否有 0,如果有 0,则把信息记录到 matrix 的第 0 行以及第 0 列中。输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]输出:[[1,0,1],[0,0,0],[1,0,1]]
2025-03-27 13:33:20
557
原创 python力扣560.和为k的子数组
然后创建一个cnt的字典,key是元素值,value是元素出现的次数。遍历前缀和数组,cnt统计前缀和出现的次数。cnt[j-k]的存在意味着存在一段数组(比如是i到j),她们的差刚好等于k。因为cnt 是在遍历过程中逐步更新的,每次更新的前缀和 j 都是当前遍历到的前缀和,而之前的所有前缀和都已经记录在 cnt 中。最开始的想法很简单:两次遍历,再加一层求和,只要找到符合要求的子串,count就+1。输入:nums = [1,1,1], k = 2。输入:nums = [1,2,3], k = 3。
2025-03-26 13:41:18
147
原创 python力扣42.接雨水
1.时间超出限制主要是因为我使用了很多max和min,那么可以使用递归来降低时间复杂度,创建left_max和right_max数组,每次比较的是当前height中的数值和前一个位置的left_max,从而取出最大的当前位置的left_max,而不是每次都要算一遍前面所有高度的max。[0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
2025-03-21 12:20:05
276
原创 python力扣438.找到字符串中所有字母异位词
大体思路如下:使用一个先加后减的原则,首先初始化滑动窗口(从0到n-1)的字符频率为一个字典,然后从n-1开始遍历,先添加当前字符到字典中,如果该字典与p的频率字典相等,可判定为是异位词的子串,将1-n+1添加到结果列表中(目前的i是指向滑动窗口结尾的,需要减掉滑动窗口的长度),不管是否如此,都需要移除左边的字符,然后在下一次循环的时候加入右边新的字符。起始索引等于 6 的子串是 “bac”, 它是 “abc” 的异位词。起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。
2025-03-19 19:00:14
262
原创 python力扣15. 三数之和
其中有优化的条件(比如在后两个最小数字都无法满足要求时),也有跳过重复元素(比如在最开始确定第一个数字,或最后确定三元组时),这些细节的地方要多注意。大体思路是这样的:首先排序(便于后面的跳过重复元素),然后固定一个数(最外层的循环),然后使用双指针法在排序后的数组中寻找另外两个数。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = [0,0,0]输出:[[0,0,0]]
2025-03-12 18:32:25
384
原创 python力扣11. 盛最多水的容器
给定一个长度为的整数数组。有条垂线,第条线的两个端点是和。找出其中的两条线,使得它们与轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。:你不能倾斜容器。:49:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。:1最开始想法比较简单,暴力用两个for循环,寻找出所有数字组合当中所围面积最大的组合就可以了。但在提交时却发现,如果这样会使用过多时间而超出限制,像下面这种测试用例的数组,我是无法通过的。
2025-03-07 12:26:13
153
原创 python力扣283.移动零
如果遍历到非0元素,right的元素与left交换,left向后移动一位(已经有一位处理完成),right向后移动一位,如果遍历到0,则只有right向后移动。但没有通过全部测试用例,原因是遍历的时候无法考虑如果有两个0挨着的情况,如果将前一个0删除,再添加到末尾,那列表整体向前挪动,遍历会指向下一个位置,那就会错过后一个0。中心思想就是将处理完成的序列的最后一个,与未处理的序列的第一个非0数进行交换,这样不会改变非0序列的顺序,0被“挤”到后面去了。移动到数组的末尾,同时保持非零元素的相对顺序。
2025-03-06 12:54:25
181
原创 python力扣128.最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9输入:nums = [1,0,1,2]输出:3。
2025-03-05 12:06:35
269
原创 python力扣49.字母异位词分组
不包含重复元素的类型,有set还有dict的key,我们可以用字典来去重,不唯一的value就可以作为最终的返回值,那唯一的key,我们可以使用排序后的字符串(相同字母组成的字符串排序后相同)。collections.defaultdict,如果在字典中查找一个不存在的键,defaultdict会自动为该键创建一个条目(类型),并将默认值赋给这个键。对于这三个问题,其实都有一个统一的解答:将排序后的字符串作为这组字符串的唯一确定的匹配模板。官方题解有更方便的函数可以替代我的if。
2025-03-03 12:27:01
211
原创 python力扣3:无重复字符的最长子串
它依赖于“当前长度+1”部分的假设,因为只有在尝试加入新字符后,才可能发现重复。它依赖于“判断重复元素”部分的结果,因为只有在移除重复字符后,当前子串才是有效的。但很快又发现了题目隐藏的心机:需要的是子串的长度,而不是子序列的长度,就像提示中说的,也就是说,我们还需要考虑“顺序”这一信息,而。它同样依赖于“判断重复元素”部分的结果,因为只有在移除重复字符后,集合中才没有重复元素。判断是否在集合内的,和加入的都是s[i](新元素),remove的是s[left](列头元素)请注意,你的答案必须是。
2025-03-02 13:01:24
360
原创 python力扣2:两数相加
1.0<=Node.val<=9,也就是说需要涉及进位的问题,那为什么不能把l1和l2都转换为整数,直接相加,再把结果转换为链表呢,位数少当然没问题的,就怕位数多long long int也吃不消。2.整体思路就是:创建一个新的链表,遍历两个给定链表的值,相加后放入新的链表中,更新指针(next)和值(val),其中注意进位的问题。4.while l2 or l1 or temp,当任何一个值不为0时都在循环,也就是说l1有值,l2有值,或者有进位的情况。的链表,表示两个非负的整数。它们每位数字都是按照。
2025-03-01 12:47:54
389
原创 python力扣1:两数之和
第二次看了答案,学会了这种写法,这种写法通过哈希表的方式,将时间复杂度从暴力解法的 O(n²) 优化到 O(n),只需要一次遍历即可找到满足条件的两个数字的索引。而哈希表做法,每次查询都能知道 O(n) 个数中是否有 target−nums[j],那么花费 O(1) 的时间,就获取了 O(n) 的信息。暴力做法每次拿两个数出来相加,和 target 比较,那么花费 O(1) 的时间,只获取了 O(1) 的信息。这就是为什么我们可以把暴力的 O(n 2) 优化成 O(n)。整数,并返回它们的数组下标。
2025-02-26 12:11:48
276
原创 python实现双臂老虎机k-armed-bandit
这里设置两台老虎机,一台均值500,标准差5,一台均值550,标准差10。初始值均为998,更新规则为reward之和/轮数。老虎机,投入钱币会随机返还钱币(reward)最后结果会在均值附近收敛。
2023-11-14 18:23:41
301
原创 力扣240题:搜索二维矩阵Ⅱ
题目:编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例 1:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5输出:true示例 2:输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[
2021-10-25 19:35:34
225
原创 python实现堆排序
利用大根堆找出当前剩余数组的最大值,依次排序def heapInsert (arr, index): # 往上 while(arr[index] > arr[int((index-1)/2)]): # 当前数大于父位置的数 arr[index],arr[int((index-1)/2)]=arr[int((index-1)/2)],arr[index] # 交换 index=int((index-1)/2) # 索引变为父位置def heapif
2021-05-13 10:49:03
154
原创 2016蓝桥杯python——四平方和
题目:四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2(^符号表示乘方的意思)对于一个给定的正整数,可能存在多种平方和的表示法。要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法程序输
2021-04-17 12:38:56
276
原创 2020蓝桥杯python——纪念日
题目:代码实现:#难道不是应该打开计算器日期计算吗?a=8+31+30+31+30+31#1921b=31+29+31+30+31+30#2020c=(2020-1921)//4#闰年+1天day=a+b+c+(2020-1921-1)*365print(day*24*60)答案:52037280
2021-04-17 12:32:26
404
原创 2020蓝桥杯python——蛇形填数
题目:代码实现:def f(n):#找规律,+4+8+12.... while n-1>=1:#从第二个开始递归 return f(n-1)+4*(n-1) else:#第一个是1 return 1print(f(20))答案:761
2021-04-17 12:13:10
251
原创 2018蓝桥杯python——全球变暖
题目:你有一张某海域NxN像素的照片,“。”表示海洋,“#”表示陆地,如下所示:….##….##……##.…####.…###.…其中“上下左右”四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。例如上图中的海域未来会变成如下样子:……………#………请你计算:依照科学家的预测,照片中有多少岛
2021-04-17 11:05:32
678
2
原创 2020蓝桥杯python——门牌制作
题目:代码实现:sum=0for i in range(1,2021): s=list(str(i)) if '2' in s: sum+=s.count('2')print(sum)答案:624
2021-04-16 22:13:35
237
原创 2020蓝桥杯python——分配口罩
题目:某市市长获得了若干批口罩,每一批口罩的数目如下:(如果你把以下文 字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目 录下有一个文件 mask.txt,内容与下面的文本相同)9090400849940059268008547000495820044226005751200417560063096005865200660440046350001066340080872004554000现在市长要把口罩分配给市内的 2 所医院。由于物流限制,每一批
2021-04-16 21:55:04
306
原创 2020蓝桥杯python——合并检测
题目:新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情,A 国准 备给大量民众进病毒核酸检测。然而,用于检测的试剂盒紧缺。 为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k 个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k 个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明 至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看,如果检测前 k−1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中 不会利
2021-04-15 20:53:25
311
原创 2020蓝桥杯python——跑步训练
题目:小明要做一个跑步训练。初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻小明的体力到达 0,他就停止锻炼。请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。答案中只填写数,不填写单位。代码实现:time=0power=10000while power>=600:#还能再跑一分钟
2021-04-15 18:02:52
312
原创 2019蓝桥杯python——数列求值
题目:代码实现:#好像还是超时了,大概要6秒才能出结果a=b=c=1for i in range(20190324-3): a,b,c=b,c,a+b+c if c>=10000: c=c%10000print(c)答案:4659
2021-04-11 21:27:26
388
原创 2019蓝桥杯python——平方和
题目:代码实现:sum=0for i in range(1,2020): s=list(str(i)) for j in s: if j=='2' or j=='0' or j=='1' or j=='9': sum+=i*i break #如果一个数同时有两个或以上的关键数,不break就会加好多遍 else: continue #
2021-04-11 21:07:33
235
原创 2019蓝桥杯python——最大降雨量
题目:代码实现:print(49-3*4-3)答案:34思路:根据题意可知,要使第四周礼拜四的数字最大,设为n,那么用最后一个49减去一定要比n大的数字,就是n能取的最大值了。第567周的礼拜四要比n大(3),而比567周的礼拜四要大的是567周的礼拜4567(3*4),可得。...
2021-04-11 20:36:13
463
原创 2016蓝桥杯python——凑算式
题目:这个算式中A到I代表1~9的数字,不同的字母代表不同的数字。比如: 6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。这个算式一共有多少种解法?代码实现:#跟三羊献瑞一样的套路import itertoolscount=0a=[i for i in range(1,10)]x=itertools.permutations(a,9)#迭代for i in x: if i[0]+i[1]/i[2]+(i[3]*100+i[4]*10+i[5]
2021-04-10 12:22:41
263
原创 2015蓝桥杯python——无穷分数
题目:无穷的分数,有时会趋向于固定的数字。请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。请填写该浮点数,不能填写任何多余的内容。代码实现:def f(a): if a==600:#大概代到600个左右就够了 return 1 return a/(a+f(a+1))sum=f(1)print('%.5f'%sum)#print(round(sum,5)),round有时候四舍五入会有问题,所以尽量用%?答案:0.58198
2021-04-10 12:07:46
122
原创 2015蓝桥杯python——打印大X
题目:小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。为了便于比对空格,所有的空白位置都以句点符来代替。要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)要求输出一个大X例如,用户输入:3 9程序应该输出:再例如,用户输入:4 21程序应该输出代码实现:#一个依存于bug运行的代码n,row=map(int,input().split(' '))s=[]line=n
2021-04-10 11:42:42
288
2
原创 2018蓝桥杯python——乘积尾零
题目:如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?5650 4542 3554 473 946 4114 3871 9073 90 43292758 7949 6113 5659 5245 7432 3051 4434 6704 35949937 1173 6866 3397 4759 7557 3070 2287 1453 98991486 5722 3135 1170 4014 5510 5120 729 2880 90192049 698 4582 4346 4
2021-04-08 21:58:31
140
原创 2015蓝桥杯python——加法变乘法
题目:我们都知道:1+2+3+ … + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如: 1+2+3+…+10 x 11+12+…+27 x 28+29+…+49 = 2015 就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。...
2021-04-08 19:43:23
403
1
原创 2018蓝桥杯python——第几天
题目:2000年的1月1日,是那一年的第1天。那么,2000年的5月4日,是那一年的第几天?注意:需要提交的是一个整数,不要填写任何多余内容。代码实现:print(31+29+31+30+4)答案:125
2021-04-08 19:26:38
158
原创 2016蓝桥杯python——报纸页数
题目:X星球日报和我们地球的城市早报是一样的,都是一些单独的纸张叠在一起而已。每张纸印有4版。比如,某张报纸包含的4页是:5,6,11,12,可以确定它应该是最上边的第2张报纸。我们在太空中捡到了一张X星球的报纸,4个页码分别是:1125,1126,1727,1728请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)?请填写表示总页数的数字。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。代码实现:print(1125+1728-1)#最小的数数到1有多少最大的数数到
2021-04-08 13:34:19
285
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人