LeetCode经典的前200道题
跟着小浩算法开始刷leetcode前200道题,这200道题都是非常经典的,都是精华,也基本覆盖了所有的算法类型。想再多没用,先刷完这200道再说。
Code_Yilia
这个作者很懒,什么都没留下…
展开
-
【二叉搜索树】LeetCode #98 验证二叉搜索树(在所有 Java 提交中击败了 100.00% 的用户)
题目链接:LeetCode #98 验证二叉搜索树题目描述:#98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的原创 2020-08-13 10:26:30 · 270 阅读 · 0 评论 -
【链表】LeetCode #61旋转链表
题目链接:LeetCode #61旋转链表题目描述:#61. 旋转链表给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3原创 2020-08-13 09:36:26 · 172 阅读 · 0 评论 -
【链表】LeetCode #24 两两交换链表中的节点
题目链接:LeetCode #24 两两交换链表中的节点题目描述:#24. 两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.通过次数135,890 提交次数204,775分析:两两交换,如果是奇数,最后一位不动。如:1,2,3,4,5 交换后的结果应为 2,1,4,3,5方案如下:因为原创 2020-08-12 16:18:05 · 124 阅读 · 0 评论 -
【链表】LeetCode #2 两数相加(基于链表的两数相加,执行用时战胜 99.89%的Java提交)
题目链接:LeetCode #2 两数相加题目描述:#2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 8原创 2020-08-12 11:09:52 · 194 阅读 · 1 评论 -
【链表】LeeTCode #160 相交链表(双指针,时间复杂度O(m+n))
题目链接:LeeTCode #160 相交链表题目描述:#160. 相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。原创 2020-08-01 17:11:50 · 275 阅读 · 0 评论 -
【链表】LeetCode #141环形链表(快慢指针)
题目链接:LeetCode #141环形链表题目描述:#141. 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到原创 2020-08-01 15:33:51 · 159 阅读 · 0 评论 -
【链表】LeetCode #19 删除链表的倒数第N个节点(时间复杂度O(n),在所有Java提交中击败了100%的用户)
题目链接:LeetCode #19 删除链表的倒数第N个节点题目描述:#19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?通过次数205,209 提交次数524,857分析:这个题的难度在于如何在一趟原创 2020-07-30 11:08:46 · 231 阅读 · 0 评论 -
【链表】LeetCode #83 删除排序链表中的重复元素 (两种方法)
题目链接:LeetCode #83 删除排序链表中的重复元素题目描述:#83. 删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3通过次数123,788 提交次数242,480方法一:直接对比当前结点的值 cur.val 与下一个结点的值 cur.next.val 是否相等,若相等原创 2020-07-30 10:21:37 · 222 阅读 · 0 评论 -
【链表】LeetCode #21 合并两个有序链表
题目链接:LeetCode #21 合并两个有序链表题目描述:#21. 合并两个有序链表(难度:简单)将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4通过次数325,435提交次数512,003分析:该题是链表题目中的基础题,太久没接触链表了,还是给自己绕了好久…定义两个指针 head、pre:初始化原创 2020-07-28 17:16:28 · 181 阅读 · 0 评论 -
【贪心算法】LeetCode #134 加油站
题目链接:LeetCode #134 加油站题目描述:#134. 加油站(难度:中等)在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1原创 2020-07-28 09:39:45 · 286 阅读 · 0 评论 -
【贪心算法】LeetCode #122 买卖股票的最佳时机 II
题目链接:LeetCode #122 买卖股票的最佳时机 II题目描述:#122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易原创 2020-07-27 16:38:02 · 258 阅读 · 0 评论 -
【贪心算法】LeetCode #55 跳跃游戏
题目链接:LeetCode #55 跳跃游戏题目描述:#55. 跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的原创 2020-07-27 11:05:26 · 248 阅读 · 0 评论 -
【二维动态规划】 LeetCode #63 不同路径 II(执行用时在所有 Java 提交中击败了 100.00% 的用户)
题目链接:LeetCode #63 不同路径 II题目描述:#63. 不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0,1,0],[0原创 2020-05-25 10:41:41 · 193 阅读 · 0 评论 -
【动态规划】 LeetCode #152 乘积最大子数组
题目链接:LeetCode #152 乘积最大子数组题目描述:#152. 乘积最大子数组给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。通过次数70,288 | 提交次数177,501分析:原来做过一个题,是原创 2020-05-23 10:19:18 · 276 阅读 · 0 评论 -
【动态规划】 LeetCode #面试题42 连续子数组的最大和(双100%)
题目链接:LeetCode #面试题42 连续子数组的最大和题目描述:#面试题42. 连续子数组的最大和输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] &l原创 2020-05-19 09:05:53 · 275 阅读 · 0 评论 -
【动态规划】 LeetCode #121 买卖股票的最佳时机(可不创建数组)
题目链接:LeetCode #121 买卖股票的最佳时机题目描述:买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 =原创 2020-05-12 11:10:02 · 199 阅读 · 0 评论 -
【动态规划】 LeetCode #72 编辑距离
题目链接:LeetCode #72 编辑距离题目描述:编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros原创 2020-05-10 21:28:36 · 214 阅读 · 0 评论 -
【动态规划】 LeetCode #62 不同路径(空间复杂度O(n))
题目链接:LeetCode #62 不同路径题目描述:不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。向右 -> 向右 -> 向下向原创 2020-05-09 14:09:45 · 436 阅读 · 0 评论 -
【动态规划】LeetCode #198 打家劫舍(执行用时在Java提交中击败了100%的用户,不开辟新的空间)
题目链接:LeetCode #198 打家劫舍题目描述:打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输...原创 2020-05-06 13:59:35 · 244 阅读 · 0 评论 -
【动态规划】 LeetCode # 64 最小路径和 (空间复杂度为O(n))
题目链接:LeetCode # 64 最小路径和题目描述:最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。第一次提交:本题属于路径问题,是经...原创 2020-05-05 16:14:50 · 459 阅读 · 0 评论 -
【二维动态规划】 LeetCode #120 三角形最小路径和(空间复杂度O(n))
前面做的题是线性动态规划,用dp[]存储结果,某些题经过优化可以用prev1和prev2存放结果,不必创建一位数组;今天的题用到的是二维动态规划,本题每次只会用到上一行的结果,故可以优化到只创建一位数组,优化会放到文章末尾。题目链接:LeetCode #120 三角形最小路径和题目描述:三角形最小路径和给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如...原创 2020-05-04 21:16:54 · 272 阅读 · 0 评论 -
【动态规划】LeetCode #53 最大子序和
LeetCode #53 最大子序和53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。DP的重点在于如何定义 dp[n] ,以及确定状态转移方程式,上一个题 #70 爬楼梯所设即所求,...原创 2020-05-01 16:54:14 · 196 阅读 · 0 评论 -
【动态规划入门】LeetCode #70 爬楼梯
4月份想刷题,打开题目发现自己想的路子都不大对,于是4月份看了《漫画算法:小灰的算法之旅》前5章,稍微入门了。趁着五一假期,开启了100天刷题计划,不求每天都刷,只求能养成刷题的习惯。万事开头难,索性就把最怵头的大头拿到最前面完成吧,今天开始攻克动态规划。动态规划DP(Dynamic Programming)的思想:把大规模的问题通过若干个规模较小的问题的结果来得到。DP的重点:①如何设置dp...原创 2020-05-01 16:41:12 · 173 阅读 · 0 评论