- 博客(19)
- 收藏
- 关注
原创 Leetcode 第746题 使用最小花费爬楼梯 题解
题目描述数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 :输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。来源:力扣(LeetCo
2021-06-14 10:41:10
564
原创 Leetcode 第160题 相交链表 题解
题目描述给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:来源:力扣(LeetCode)链接:LeetCode题目分析(1)有一种比较浪漫的解法,就是A走完自己的路,然后走B的路,B走完自己的路后,走A的路,这样两个有交集并互相牵挂的A和B一定会在一起;(2)假设相交之前的那部分,A的长度是a,B的长度是b,相交之后的那部分长度是公共部分,长度为c;(3)当A走完自
2021-06-12 16:28:21
314
原创 Leetcode 第121题 买卖股票的最佳时机 题解
题目描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 :输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能
2021-06-12 11:00:33
250
原创 Leetcode 第104题 二叉树的最大深度题解
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。来源:力扣(LeetCode)链接:LeetCode题目分析(1)涉及树的题,大多可以用递归解,此题也一样,由于是求树的最大深度,则可递归求左右子树的最大深度,然后加1即可得到树的最大深度;(2)递归的出口条件,是到达了叶子结点。(3)另外一种解法是层序
2021-06-11 14:21:29
201
原创 Leetcode 第136题 只出现一次的数字题解
题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例输入: [2,2,1]输出: 1来源:力扣(LeetCode)链接:LeetCode题目分析(1)不考虑空间复杂度和时间复杂度的情况下,此题解法较多,可以用集合解,也可以排序解,还可以双指针等,但是限定了空间和时间复杂度后,解法也就受限制了;(2)可以考虑位运算,具体而言是使用位运算中的异或运算
2021-06-10 19:30:36
190
原创 Leetcode 第557题 反转字符串中的单词 III 题解
题目描述给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”来源:力扣(LeetCode)链接:LeetCode题目分析(1)由于java中String是不可变对象,因此要考虑在额外的字符数组或者StringBuilder上操作;(2)用字符数组解时,由于要实现字符串中的单词反转,因此可以实现一个单词的反转方法,具
2021-06-09 18:50:06
232
原创 Leetcode 第237题 删除链表中的节点题解
题目描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.来源:力扣(LeetCode)链接:LeetCode题目分析(1)node为传入的唯一参数,因此肯定只能在node的周围想办法,立马想到下一个节点,因为单链表没法访问上一节
2021-06-09 16:44:54
149
原创 Leetcode 第2题 两数相加题解
题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.来源:力扣(LeetCode)链接:LeetCode题目分析(1)由于链表是逆序存每位数字,模拟加法操作,可把依次链
2021-06-08 16:23:05
157
原创 Leetcode 第206题 反转链表题解
题目描述给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 :输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]来源:力扣(LeetCode)链接:LeetCode题目分析(1)这道题很简单,但是在实习面试中却经常出现,因此熟练掌握很有必要;(2)递归写法太简单,因此用迭代过程,模拟一下链表反转的过程,定义两个指针,一个指向当前结点,一个指向当前结点前一个结点,每次让当前结点重新链接到前一个结点即实现了反转,但是由于要遍历整个链表,因此每一
2021-06-08 11:20:32
316
原创 Leetcode 第53题 最大子序和题解
题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 :输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。来源:力扣(LeetCode)链接:LeetCode题目分析(1)每一次遍历到当前元素时,比如遍历到上述示例中的第二个元素1,需要考虑前面元素和加上此元素为-1,与此元素1的大小比较,取较大值1,使得其对结果的贡献尽可能大;(2)
2021-06-08 10:52:16
130
原创 Leetcode 第26题 删除有序数组中的重复项题解
题目描述给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 :输入:nums = [1,1,2] 输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums的前两个元素被修改为 1, 2 ,不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:LeetCode题目分析(
2021-06-08 09:52:51
263
原创 Leetcode 第88题 合并两个有序数组题解
题目描述给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m +n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]来源:力扣(LeetCode)链接
2021-06-07 20:00:51
136
原创 Leetcode 第70题 爬楼梯题解
题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 :输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶来源:力扣(LeetCode)链接:LeetCode题目分析(1)如果熟悉斐波那契会发现,其实这就是斐波那契数列相关的问题,诸如此类的描述还有青蛙跳台阶和第n个月兔子的问题等。(2)但是此题如果直接调用递归公式,必然会导致递归深度过
2021-06-02 19:01:26
124
原创 Leetcode 第21题 合并两个有序链表题解
题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 :输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]来源:力扣(LeetCode)链接:LeetCode题目分析(1)由于两个链表是有序的,因此逐一两个链表的结点对比就可以合并,时间复杂度为O(m+n);(2)有迭代和递归两种方法;就迭代而言,主要是注意指针的链接,还要设置当前指针指向新链表的尾部,每次比较两个链表头部的结点值,
2021-06-02 18:28:47
139
原创 Leetcode 第14题 最长公共前缀题解
题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”] 输出:“fl”来源:力扣(LeetCode)链接:LeetCode题目分析(1)考虑上述事例,如果用人工方法找公共前缀,我们通常的做法是,看前两个字符串的公共前缀,得到前缀为flow,然后用这个前缀flow继续与第三个比较,得到最终结果为fl;(2)算法也是一样的流程,因此需要解决两个问题,第一是如何求得
2021-05-31 16:07:26
279
原创 Leetcode 第9题 回文数题解
题目描述给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。来源:力扣(LeetCode)链接:LeetCode题目分析(1)与整数反转一样,回文数也需要反转,但是并不需要全部反转,由于回文数是对称的,因此当循环进行到一半时,即可判断是不是回文数;(2)但是也要分两种情况,奇数位数和偶数位数,比如121和1221,这两种情况是不太一样的,因为121划
2021-05-31 15:28:48
288
原创 Leetcode 第七题 整数反转题解
题目描述给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。来源:力扣(LeetCode)链接:LeetCode题目分析(1)简单的整数反转,通过不断除和求余,再累加即可,余数作为每一次的累加对象,而除得到的结果作为下一次被求余的对象。(2)形式化就是,如321这个数,321求余得到1,先令res=1,而321/10
2021-05-28 10:20:41
172
原创 Leetcode 剑指 Offer 39 数组中出现次数超过一半的数字题解
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。来源:力扣(LeetCode)链接:LeetCode题目分析(1)首先考虑较简单的方法,既然题目已经说了这个数字出现次数超过数组长度的一半,那把数组排序后,数组中间的数肯定就是这个数呀,既然如此,两步搞定,排序+返回中间的数;(2)但貌似这样做太没水平了,想个效率高点的方法,毕竟排序基本都O(NlogN),看看能否降到O(N);(3)姑且称这个要找的数为众
2021-05-18 22:50:55
147
原创 Leetcode 第15题 三数之和题解
Leetcode 第15题 三数之和题解题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。来源:力扣(LeetCode)链接:LeetCode题解(1)拿到此类题目肯定不要第一时间考虑暴力解,此题考虑暴力解,要至少三层循环,时间复杂度,一下干到O(n3),而且也不能很好保证上述所说的不重复,这显然不是一个好的解;(2)那么
2021-05-18 20:05:22
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人