![](https://img-blog.csdnimg.cn/1812978aec6c448fb81e16e5a3347afe.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
力扣面试150题
文章平均质量分 79
Java方法解决力扣面试150题,数据结构与算法的学习记录,从浅到深
Stevedash
加油!其实人生在世吧,是不太需要别人建议的...
不会明白的,只有亲身经历后才知道
展开
-
Leetcode刷题记录- 跳跃游戏(中等)-面试经典 150 题
我们从起点开始遍历数组,维护一个最远距离变量,表示当前能够到达的最远位置。在遍历过程中,对于每个位置i,都计算它能够到达的最远位置:即i+nums[i]。如果最远距离已经超过了数组末尾,那么就说明能够到达末尾,返回true。无论怎样,总会到达下标为 3 的位置。可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。时间复杂度为O(n),其中n是数组的长度,因为我们只需要遍历一次整个数组。当遍历完整个数组仍然没有找到能够到达末尾的位置,就返回false。原创 2023-05-11 21:29:11 · 64 阅读 · 0 评论 -
Leetcode刷题记录- 买卖股票的最佳时机 II(中等)-面试经典 150 题
给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。原创 2023-05-10 19:46:52 · 91 阅读 · 0 评论 -
Leetcode刷题记录-买卖股票的最佳时机(简单)-面试经典 150 题
给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。5在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。0。原创 2023-05-10 15:24:12 · 127 阅读 · 0 评论 -
Leetcode刷题记录-轮转数组(中等)-面试经典 150 题
( PS:k%nums.length是对k除s以数组长度(数组名为nums)的余数。Eg:如果k=5,而num数组有10个元素,则k%nums.length的值为5%10=5。当k的值大于或等于数组长度时,模运算操作可以将其限制在数组索引范围内,使其不越界。使用了额外的数组来存储轮转后的元素,因此它需要O(n)的额外空间来存储新的数组。在遍历两次原始数组时,每个元素都只被访问一次,因此循环的总时间复杂度为O(n)。可以定义一个新数组用来存储轮转后的新数组,首先要判断传入的轮转k值,原创 2023-05-09 22:41:08 · 64 阅读 · 0 评论 -
Leetcode刷题记录-多数元素(简单)-面试经典 150 题
算法基于一个简单的事实:出现次数大于 $\lfloor n/2\rfloor$ 的数字最多只能有一个,因此只需要遍历一遍数组,记录当前数字出现的次数,同时记录候选数字,如果遍历到下一个数字和候选数字相同则次数加一,否则次数减一,当次数为零时更换候选数字。满足我们进阶的需求!的时间复杂度是 $O(n\log n)$,所以整个算法的时间复杂度也是 $O(n\log n)$。重新审视一下题意,多数元素即数组中的众数,出现次数超过数组元素的一半,但是因为数组内的元素是乱序的,所以没办法判断。,返回其中的多数元素。原创 2023-05-06 23:14:22 · 147 阅读 · 0 评论 -
Leetcode刷题记录-删除有序数组中的重复项(中等)-面试经典 150 题
遍历整个数组,如果当前元素 nums[i] 不等于 nums[q] 或者 nums[p],p 和 q 之间的距离小于2,即新出现的元素或者仍然可以容忍的元素,则将 nums[i] 赋值给 nums[p],并让 p 自增,q 同时也自增;接下来我们需要将每个元素移动到数组的前端,可以通过维护两个指针来实现:一个指针用于遍历数组,另一个指针用于标识下一个可存储元素的位置。定义两个指针 p 和 q,p 指向下一个可以填充的位置,q 指向当前已经检查过的元素(即合法的元素),初始时,p=1,q=0;原创 2023-05-06 18:40:25 · 65 阅读 · 0 评论 -
Leetcode刷题记录-删除有序数组中的重复项(简单)-面试经典 150 题
但是这样的话需要对原数组nums进行操作,将Set集合遍历写入nums数组中,这样就可以得到一个去重的有序数组,// 长度正确的期望答案。不需要考虑数组中超出新长度后面的元素。如果所有断言都通过,那么您的题解将被。不需要考虑数组中超出新长度后面的元素。,返回删除后数组的新长度。,k位置后的元素不做考虑(由题意得)删除重复出现的元素,使每个元素。并且Set集合的长度就是有序数组。新长度为k(有序不重复元素的区域)函数应该返回新的长度。函数应该返回新的长度。原创 2023-05-06 14:40:48 · 76 阅读 · 0 评论 -
Leetcode刷题记录-合并两个有序数组(简单)-面试经典 150 题
可以定义一个新的整型数组sum1,sum2,长度分别为m+n,n,再通过将方法接收到的数组地址赋值给这俩个数组,因为数组的长度已经定义过了,所以不用考虑容量问题。这句代码的意思是“定义一个长度为 n 的新数组 sum2”,这个语句创建了一个名为 sum2 的 int 数组,该数组的长度为 n,也就是第二个参数 nums2 的长度。,这意味着在整个程序执行期间,sum2 和 nums2 将指向同一片内存区域,修改 sum2 或 nums2 中任何一个数组的元素都会影响另一个数组的相应元素。原创 2023-05-05 22:13:52 · 99 阅读 · 1 评论 -
Leetcode刷题记录-移除元素-面试经典 150 题
Leetcode刷题记录-(27)移除元素-面试经典 150 题解题思路和具体实现代码原创 2023-05-04 22:10:34 · 114 阅读 · 1 评论