算法
文章平均质量分 59
white and white
这个作者很懒,什么都没留下…
展开
-
Leetcode学习之134. 加油站
其实就说明正如我下图说的一样,假设车辆A不能到达 y+1的油站上,则 x到y上的任意一点都无法到达y+1.因为最好的情况是从一开始出发,然后每个油站都有剩余的油(gas>=0),但是这种情况下都无法达到y+1,更别提从x之后的点位出发,每次都从0开始算起(gas=0)带入上面的2个不等式 gas[ z ] + gas[ z+1 ] +…+gas[ z-1 ] )1. gas[ i ] + gas[ i+1 ] +…+ gas[ z ] = > cost[ i ] + cost[ i+1 ] + …原创 2023-12-08 18:10:10 · 405 阅读 · 0 评论 -
Leetcode学习之209. 长度最小的子数组
这种数组的题目(尤其是连续子数组)第一眼一般都是会用暴力法就能破解,因此可以延伸出第一种解法,暴力法。],逐个遍历,以确定每个 nums[i] — nums[j] >= target,用min一直维护最新的最短连续子数组即可。通常数组,我们都会寻求一种只遍历一次,也就是O(n)的时间复杂度的解法。题目说了,只要>=target就行,那我们只要保持遍历数组的过程中,保持target 值就可以了。* 滑动窗口,通过前后指针,前指针先走,每次判断两指针内的所有数相加是否大于target,记录长度。原创 2023-11-10 15:23:31 · 110 阅读 · 0 评论 -
Leetcode学习之139.单词拆分---dp
看到这个问题,其实一开始我是想用单纯的逐个单词匹对的方式,也就是通过遍历字符串S,从0开始如果有 s[0~i] contains wordDict里的某个单词,则认为 0 ~ i组成的子串可以拼接出,如果不包含,则通过 0 ~ i-j(j通过循环逐步增加直至到s[0]) + s[j] 查看是否可以独立通过字典中的单词拼接。**用在这个剪枝的方法里。从问题来看,其实是一个背包问题,s就是需要填充的空间,wordDict就是可以填充的物品,由于没有限制wordDict的使用次数,因此可以看作是完全背包问题。原创 2023-09-27 15:43:02 · 118 阅读 · 0 评论 -
Leetcode学习之167.两数之和II--输入有序数组
有序,二分法,那我们是不是可以通过两个指针,第一个指针i指向第一个数,然后target - numbers[i] = x,把x作为二分查找的new target让他查找呢,这样或许对时间复杂度会有稍稍的提升。这道题其实第一眼看到有序,(二分法的DNA就动了),但是题目只要求了常量级的额外空间,没有时间要求,所以我们可以通过逐个遍历,也就是 n² 的时间复杂度去完成这题目。可以看到一次比对下来,把所有的15以及第一排的遍历都可以省略了,接下来是倒数第二个大的数字,也就是我们的11,,所以我们舍弃后续的遍历。原创 2023-09-20 11:29:05 · 71 阅读 · 0 评论 -
算法学习之单源最短路径问题---Dijkstra的JAVA实现
Dijkstra是用于计算从一个顶点到其余各顶点的最短路径算法(构建单源点的最短路径树),解决的是有权图中最短路径问题。由于每次都会选取当前起点以及经过中间点到目标点的最短距离,而不考虑其他未知点的因素,故而是一个基于局部最优解的贪心策略。因而,每当在已经确定的集合S中加入新的顶点v,都需要重新更新起点到其他点的最短距离。Dijkstra其实和Prim(普利姆)算法极其相似,但是Prim是构造一个图中的最小生成树,类似于在一个图中找出一条连接所有顶点的最短路径,而Dijkstra是找出起点到其他顶点的最短原创 2022-05-14 15:44:40 · 1754 阅读 · 0 评论 -
Leetcode学习之 12.整数转罗马数字
Leetcode 12.整数转罗马数字(middle)原创 2023-07-28 00:28:08 · 59 阅读 · 0 评论 -
Leetcode学习之 80.删除有序数组中的重复项 II
执行速度0ms,题目重点是原地删除以及只可以使用额外的O(1)空间。所以按照平常的新旧数组复制是不可行的。因此想到了利用双指针(fast,slow)利用元素交换下标的或者覆盖的方式进行删除。最后只需要返回slow的下标位置,就是题目所需要的删除后的数组长度啦。图中实例: nums = 0 0 1 1 1 1 2 3 3。原创 2023-08-04 11:33:09 · 111 阅读 · 0 评论 -
Leetcode学习之238. 除自身以外数组的乘积
逐个计算,如果可以除法,只需要遍历一次得出整个数组的乘积,然后第二次遍历的时候,用总乘积除掉当前idx对应val即可。因此我们可以利用乘法,其实题目就需要把除去该数,其他的所有乘积,我们只需要遍历一遍,把该数组每个对应的数据项的左右乘数算出来即可,1. 新建左右前缀数组,用于存放当前idx所对应的数据的左右乘数。原创 2023-08-30 17:56:38 · 92 阅读 · 0 评论