- 博客(34)
- 收藏
- 关注
原创 leetcode_887_鸡蛋掉落___循序渐进的分析
一次尝试蛋没炸[num-1,Egg]此处和上面不太相同[num,Egg]=[num-1,Egg-1]+[num-1,Egg]+1。时其已经没有,任何容错,除当前不知道是否能承受的最小值进行遍历尝试才能确保找到。一次尝试蛋炸了剩[num-1,Egg-1]与。在一次尝试中选择了在dep层测试 其可以分为。需要取最小值,因为在能完成的情况下要找最少的次数。需要注意的是,对于上述理论只有在。可以发现这都是子问题的传递,而这也是可以使用。如果在dep层炸了: 则变成了。在一次对X层的测试中,为了使。
2024-10-14 21:06:59
584
原创 leetcode_198_打家劫舍
了,但是为了使"偷"的尽可能多除了必须不能"偷"的全要"偷",,第i个房屋只有"偷"和不"偷"两种情况,分别进行讨论。: 这就很明显了不"偷"那就是前[i-1]个的情况嘛。既然"偷"了 i那就肯定不能偷。:首先定义一个数组对于。
2024-10-02 21:28:49
472
原创 leetcode每日一题day22(24.10.2)——准时到达的列车最小时速
此时使用的速度范围为1到1e7 ,其中1e7有题目给出的数据范围得到,(最大的dist为1e7,最小的小数为0.01),由于double进行取整时有精度丢失问题,可以使用round(double) 进行向上取整。(C为可能的所有速度,在最不好运的情况下,C是有可能远大于N的,本题就是,C最大为10^9 约为N的二次方倍,此时换算成N约为N^3)前者有N^2优化到最差情况也只有30左右,优化巨大。大的速度也必定满足,由此便可引入二分查找。小的速度都不用再考虑,:对于一个可能的速度。
2024-10-02 21:04:41
600
原创 leetcode每日一题day21(24.10.1)——最低票价
很明显是不对的,所有与走楼梯问题有所不同,至于哪里不同呢,可以观察到,对于第19天竟然也需要15元的钱,来源很明显是从0买三十天的票而来,之所以会这样是考虑了9-19天也买票,但事实上,第八天过后是不需要买票的,只需要第20天买一张单日票即可。对于第X天,买票有三种方案,即从,X-1天买一天的票,X-7买7天的票,X-30买三十天的票,这已经很有,走楼梯,斐波那契的味道了,需要注意的是,总天数不到30天也是能买30天的票的这也比较合理,将代码更新为如下情况。据此写出了如下代码。
2024-10-01 22:23:03
350
原创 leetcode每日一题day20(24.9.30)——座位预约管理系统
由于一直是出最小的编号,并且除此之外只有添加元素的操作,如果使用数组存储,并记录,这样出最小编号时间是O(n)复杂度,释放一个座位则是O(1)在操作出线机会均等的情况下,平均是O(n/2),对于安排最小的座位,我们便可依据此,建立小顶堆,这样安排最小座位便是取根元素,取完进行调整,释放座位操作,可以理解为插入一个元素在数组末尾,并从尾到头进行调整便可。此处贴出自己实现的,堆排序,建堆可以优化,此时复杂度递推复杂度为T(n)=log2N+2T(n/2)一棵完全二叉树:所有它可以使用一维数组完美存储。
2024-09-30 21:06:42
570
1
原创 leetcode每日一题day19(24.9.29)——买票需要的时间
对于当前的人前方的的人可以使用上述策略,但对于后方由于当前的人有更高的优先,而导致情况有所不同,但如何操作呢。2 6 3 1 2 4 对于排在n=2的人 即需要买三张票的人 对于其前方的人使用上述策略,所有容易想到对于某个人如果比当前的人买的多就按当前的人数量算。对于 n=2这个人前方的人对 购票数继续处理,后方的则是对购票数减一进行处理。因为在一次次减一的情况下,当前的人已经离队了,在最开始的情况下每人需要买的票数减一是能保持相对位置不变的,如果比当前的人少则按其票数统计,道理相同,
2024-09-30 20:02:49
587
原创 leetcode每日一题day17(24.9.27)——每种字符最少取k个
一直往一边取,搜索完所有可能,并在此基础上进行剪枝,剪枝方案有如果某一分钟数(在dfs中则为深度)每种都拿满了k个就记录,后续如果有深度到达这个值还没完成就可以剪枝。对于这种左右取值比较容易想到利用左右指针进行滑窗,但仔细想想就会发现,左右指针移动策略怎么设置都不对,此时其提出的。这样问题就变成了,清晰的,左右指针移动策略好设置的,滑窗问题。满足要求就往后搜,最后返回搜索队列达到过的最大深度。个的区间,这样问题就转换为了,看到题目就想到了搜索,
2024-09-27 13:43:11
562
原创 leetcode每日一题day16(24.9.26)——数组元素和与数字和的绝对差
求数字和,由于对于一个数,其必定大于其个数位数字的和,所以可以直接对。遍历数组在对数组元素进行求和时并使用。
2024-09-26 14:18:31
261
原创 leetcode每日一题day15(24.9.25)——公司命名
首先如果没有相同的后缀,则无论只要不是相同的首字母交换都不会出现重复情况,如果有重复后缀,则还需多增加个不能和,首字符与另一相同后缀字串的首字符相同的字串交换。按后缀也是同样的道理,但可使用位运算存储一个后缀,所有的全部首字母,并且优化结构,把时间均摊到,初始化阶段,时间复杂度有所降低。主要矛盾已经明确,则可对矛盾进行分析。因为一旦对有相同的后缀字符进行替换后,必定会重复,所有等同于没有这个字母。基于上述:扩展到26种首字符也相同,只是需要遍历所有组合即可。, 为字母。
2024-09-26 14:12:37
465
原创 leetcode每日一题day14(24.9.24)——字符串最多的子序列
对于应该首要和贡献联系起来,对于什么是贡献呢,即在某种情况下,会贡献出多少种,符合要求的结果,此题属于较为基础的,对于text中的一个字符如果是非patten中的元素,则对结果无任何影响,如果出现pattern[0]则需考虑后方有多少个pattern[1],如果出现pattern[1]时则忽略,因为其在patern[0]中考虑过了,不能起点到终点算一次 ,终点到起点又算一次,对于最后的添加一个,也是差不多的既然可以随便放,当然选择放最边上,至于放哪边,则看pattern([0]/[1])谁多。
2024-09-25 00:37:21
360
原创 leetcode每日一题day13(24.9.23)——最佳观光组合
注意到观光值公式中以上述情况操作时,在确定终点节点后values[终点]-index[终点]是固定不变的,变化的是values[起点]+index[起点],也就是需要找到起点景点中最大的values[起点]+index[起点],这个最大值我们可以边遍历边更新,这样就避免了大量的重复计算。对于每个节点为终点的情况,遍历其可能的出发节点,计算出每个节点为终点时观光值最大的情况,最大情况下观光值最高的节点的观光值。对于一个景点A为终点时,其所有可能情况为前方个每个节点到A的进行观光。
2024-09-23 17:22:27
236
原创 leetcode每日一题day12(24.9.22)——找到小镇的法官
【代码】leetcode每日一题day12(24.9.22)——找到小镇的法官。
2024-09-22 23:08:21
229
原创 leetcode每日一题day11(24.9.21)——边积分最高的节点
每有一个节点A指向节点B,就把就把A的编号叠加在,下标为B所记录的数值中,并加以判断即可。:用编程语言模拟一遍即可,即定义一个。
2024-09-21 14:49:46
259
原创 leetcode每日一题day8(24.9.18)——坐上公交的最晚时间
没坐上乘客中最早来的 有错过末班车,和末班车坐满两种情况,这两种情况自己想要坐上则分别对应末班车到来时刻到,和比最后上车的乘客早到,此时考虑极端情况,没有人没坐上,此时应该考虑最后一趟坐满了没,和既错过末班车又末班车坐满情况此时也应该考虑末班车是否坐满。至此所有情况考虑到位,综合上述情况,总的还是考虑末班车坐满了没,于是对其进行模拟得出答案(个人思想历程),排序也是毋庸置疑的。
2024-09-19 15:07:07
177
原创 leetcode每日一题day3(24.9.13)——预算内的最多机器人数目
这样子更新最大值操作从原本的每更新一次都可能需要遍历一遍整个数组,优化为入队。掉,将队列维护成递减队列,当前最大值在。左移时剔除掉后,则选用备选的。的备选项,所有可以全部。
2024-09-13 22:58:11
591
原创 粘木棍 蓝桥杯
核心思路:把木棍两两结合 每结合一次就少一个木棍,每次达到想要的数目,就判断最长木棍和最短木棍的的大小;递归思路:遍历所有的木棍 将木棍调用递归方法; 遍历余下木棍 将木棍与上层遍历出的木棍结合且把最后的木棍与本次找出的木棍交换位置数组的size--,继续递归如不太清楚可注意关键位置的注释#include<iostream>#include<stdlib.h>using namespace std;int minNum = 1000000007;type...
2022-03-28 00:45:34
538
原创 跳马 蓝桥杯
直接暴力递归 真香 遍历可以走的八个方向,且用搜索算法,套用的数组记录的方式+剪枝,朴实无华。#include<iostream>using namespace std;int arr[9][9],flag=1000000007;void func(int a,int b,int c,int d,int num){ if(num>=flag){return;} if(a==c&&b==d){ flag=num<flag ?
2022-03-27 23:55:14
176
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人