![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode刷题
leetcode算法刷题
Bonbon_wen
To be or not to be!
展开
-
Leetcode刷题剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums =[1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof著作权归领扣网络所有。商...原创 2021-01-17 16:44:30 · 133 阅读 · 0 评论 -
Leetcode刷题剑指 Offer 51. 数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。链接:https://leetcode.cn/problems/shu-zu-zhong-de-ni-xu-dui-lcof。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。0原创 2021-01-05 22:07:02 · 219 阅读 · 2 评论 -
Leetcode刷题1114. 按序打印
我们提供了一个类:public class Foo {public void first() { print("first"); }public void second() { print("second"); }public void third() { print("third"); }}三个不同的线程将会共用一个Foo实例。线程 A 将会调用 first() 方法线程 B 将会调用second() 方法线程 C 将会调用 third() 方法请设计修改程序,以...原创 2020-11-27 01:23:39 · 248 阅读 · 0 评论 -
Leetcode刷题322. 零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。输入:coins = [1, 2, 5], amount = 11。输入:coins = [2], amount = 3。输入:coins = [1], amount = 0。输入:coins = [1], amount = 1。输入:coins = [1], amount = 2。你可以认为每种硬币的数量是无限的。解释:11 = 5 + 5 + 1。来源:力扣(LeetCode)原创 2020-12-16 23:39:10 · 1194 阅读 · 0 评论 -
Leecode刷题283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。...原创 2020-04-06 23:18:16 · 363 阅读 · 0 评论 -
Leetcode刷题206. 反转链表
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?,请你反转链表,并返回反转后的链表。原创 2020-04-11 21:40:30 · 297 阅读 · 0 评论 -
Leetcode刷题189. 旋转数组
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输入: [-1,-100,3,99] ...原创 2020-04-12 22:28:55 · 318 阅读 · 0 评论 -
Leetcode刷题162. 寻找峰值
峰值元素是指其值大于左右相邻值的元素。给定一个输入数组nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 2。示例2:输入: nums = [1,2,1,3,5,6,4]输出: 1 或 5解释: 你的函数可以...原创 2020-12-11 23:38:35 · 259 阅读 · 0 评论 -
Leetcode刷题149. 直线上最多的点数
给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]。请找出一条直线,其通过的点的数目最多。设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S,你仅需返回[S[0],S[1]]作为答案,若有多条直线穿过了相同数量的点,则选择S[0]值较小的直线返回,S[0]相同则选择S[1]值较小的直线返回。示例:输入: [[0,0],[1,1],[1,0],[2,0]]输出: [0,2]解释: 所求直线穿过的3个点的编号为[0,2,3]提示原创 2020-11-22 22:18:13 · 431 阅读 · 0 评论 -
Leetcode刷题142. 环形链表 II
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。输入:head = [3,2,0,-4], pos = 1。输入:head = [1,2], pos = 0。解释:链表中有一个环,其尾部连接到第二个节点。解释:链表中有一个环,其尾部连接到第一个节点。原创 2020-04-12 16:29:28 · 259 阅读 · 0 评论 -
Leetcode刷题141. 环形链表
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。著作权归领扣网络所有。输入:head = [3,2,0,-4], pos = 1。输入:head = [1,2], pos = 0。解释:链表中有一个环,其尾部连接到第二个节点。解释:链表中有一个环,其尾部连接到第一个节点。输入:head = [1], pos = -1。给定一个链表,判断链表中是否有环。解释:链表中没有环。链接:。原创 2020-04-11 19:09:45 · 283 阅读 · 0 评论 -
Leecode刷题125. 验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/p...原创 2020-04-06 23:08:16 · 296 阅读 · 0 评论 -
Leetcode刷题122. 买卖股票的最佳时机 II
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3。解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。输入: [7,1,5,3,6,4]输入: [1,2,3,4,5]原创 2020-12-17 07:30:57 · 285 阅读 · 0 评论 -
Leetcode刷题121. 买卖股票的最佳时机
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。上面等式当i=0时,dp[i - 1]不合法,所以需要对base case处理一下,当i-1 == -1时。所以最终所求的答案是dp[n - 1][K][0],即最后一天,最多允许K次交易,所能获得的最大利润。例如dp[3][2][1]表示今天是第三天,持有股票,至今最多进行2次交易。著作权归领扣网络所有。原创 2020-12-14 22:46:35 · 311 阅读 · 0 评论 -
Leetcode刷题88. 合并两个有序数组
给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n 。你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums...原创 2020-04-16 22:50:27 · 314 阅读 · 0 评论 -
Leetcode刷题84. 柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。示例:输入: [2,1,5,6,2,3]输出: 10来源:力扣(LeetCode...原创 2020-04-30 23:42:49 · 337 阅读 · 0 评论 -
Leetcode刷题70. 爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶...原创 2020-04-09 22:47:25 · 282 阅读 · 0 评论 -
Leetcode刷题66. 加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。来...原创 2020-04-18 16:54:45 · 281 阅读 · 0 评论 -
Leetcode刷题54. 螺旋矩阵
给定一个包含m x n个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例1:输入:[[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7]来源:力扣(LeetCode)链接:https:/...原创 2020-12-09 23:26:54 · 229 阅读 · 0 评论 -
Leetcode刷题27. 移除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元...原创 2020-04-08 20:50:56 · 292 阅读 · 0 评论 -
Leetcode刷题26. 删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例...原创 2020-04-12 17:24:27 · 277 阅读 · 0 评论 -
Leetcode刷题24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs著作权归...原创 2020-04-11 23:38:51 · 279 阅读 · 0 评论 -
Leetcode刷题21. 合并两个有序链表
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。原创 2020-04-14 23:59:09 · 334 阅读 · 0 评论 -
Leetcode刷题20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。左括号必须用相同类型的右括号闭合。注意空字符串可被认为是有效字符串。左括号必须以正确的顺序闭合。输入: "()[]{}"输入: "([)]"输入: "{[]}"原创 2020-04-23 23:03:24 · 273 阅读 · 0 评论 -
Leetcode刷题15. 三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]来源:力扣(Le...原创 2020-04-11 15:16:46 · 304 阅读 · 0 评论 -
Leetcode刷题11. 盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49来源:力扣(Leet...原创 2020-04-09 22:36:35 · 400 阅读 · 1 评论 -
Leetcode刷题628. 三个数的最大乘积
给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24注意:给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-product-of-three-number原创 2020-12-18 07:43:59 · 269 阅读 · 0 评论 -
Leetcode刷题2. 两数相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://lee...原创 2020-11-18 23:59:34 · 301 阅读 · 0 评论 -
Leetcode刷题面试题 16.14. 最佳直线
给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]。请找出一条直线,其通过的点的数目最多。设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S,你仅需返回[S[0],S[1]]作为答案,若有多条直线穿过了相同数量的点,则选择S[0]值较小的直线返回,S[0]相同则选择S[1]值较小的直线返回。示例:输入: [[0,0],[1,1],[1,0],[2,0]]输出: [0,2]解释: 所求直线穿过的3个点的编号为[0,2,3]提示原创 2020-11-25 00:41:45 · 888 阅读 · 1 评论 -
Leetcode刷题188. 买卖股票的最佳时机 IV
随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3。解释:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4。解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。输入:k = 2, prices = [3,2,6,5,0,3]原创 2020-12-19 23:13:23 · 301 阅读 · 1 评论 -
Leetcode刷题123. 买卖股票的最佳时机 III
随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。输入: [3,3,5,0,0,3,1,4]输入: [1,2,3,4,5]原创 2020-12-19 23:44:05 · 280 阅读 · 1 评论 -
Leetcode刷题309. 最佳买卖股票时机含冷冻期
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown。类似,只不过存在冷冻期,所以至少需要隔一天才能选择买入,可以套进框架,修改问题的参数。解释:第 i 天选择 buy 的时候,要从 i-2 的状态转移,而不是 i-1。解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格。输入: [1,2,3,0,2]原创 2020-12-20 00:01:22 · 331 阅读 · 1 评论 -
Leetcode刷题714. 买卖股票的最佳时机含手续费
给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 ;非负整数fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解释: 能够达到的最大利润: 在此...原创 2020-12-20 00:17:29 · 317 阅读 · 3 评论 -
Leetcode刷题18. 四数之和
给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]...原创 2020-12-21 23:08:24 · 265 阅读 · 0 评论 -
Leetcode刷题80. 删除排序数组中的重复项 II
给定一个增序排列数组 nums ,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例 1:输入:nums =原创 2020-12-23 00:12:01 · 288 阅读 · 0 评论 -
Leetcode刷题316. 去除重复字母
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同示例 1:输入:s = "bcabc"输出:"abc"示例 2:输入:s = "cbacdcbc"输出:"acdb"来源:力扣(LeetCode)链接:htt.原创 2020-12-26 17:26:42 · 320 阅读 · 1 评论 -
Leetcode刷题380. 常数时间插入、删除和获取随机元素
设计一个支持在平均时间复杂度 O(1)下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。remove(val):元素 val 存在时,从集合中移除该项。getRandom:随机返回现有集合中的一项。每个元素应该有相同的概率被返回。示例 :// 初始化一个空的集合。RandomizedSet randomSet = new RandomizedSet();// 向集合中插入 1 。返回 true 表示 1 被成功地插入。randomSet..原创 2020-12-26 21:19:25 · 266 阅读 · 0 评论 -
Leetcode刷题33. 搜索旋转排序数组
升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为[4,5,6,7,0,1,2] )。请你在数组中搜索target ,如果数组中存在这个目标值,则返回它的索引,否则返回-1。示例 1:输入:nums = [4,5,6,7,0,1,2], target = 0输出:4示例2:输入:nums = [4,5,6,7,0,1,2], target = 3输出:-1示例 3:输入:nums = [1], t...原创 2020-12-27 11:48:32 · 261 阅读 · 0 评论 -
Leetcode刷题81. 搜索旋转排序数组 II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回false。示例1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例2:输入: nums = [2,5,6,0,0,1,2], target = 3输出: false来源:力扣(LeetCode)链接...原创 2020-12-27 17:05:49 · 281 阅读 · 3 评论 -
Leetcode刷题710. 黑名单中的随机数
给定一个包含 [0,n ) 中独特的整数的黑名单 B,写一个函数从 [ 0,n ) 中返回一个不在 B 中的随机整数。对它进行优化使其尽量少调用系统方法 Math.random() 。提示:1 <= N <= 10000000000 <= B.length < min(100000, N)[0, N)不包含N,详细参见interval notation。示例 1:输入:["Solution","pick","pick","pick"][[1,[]]...原创 2020-12-27 23:46:41 · 295 阅读 · 0 评论