
LeetCode
文章平均质量分 92
Hi丶ImViper
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Leetcode】1209.删除字符串中的所有相邻重复项 II
1209. 删除字符串中的所有相邻重复项 II难度中等78给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除操作后,返回最终得到的字符串。本题答案保证唯一。示例 1:输入:s = "abcd", k = 2输出:"abcd"解释:没有要删除的内容。示例 2:输入:s = "deeedbbcccbdaa", k = 3输原创 2021-03-18 11:35:05 · 1079 阅读 · 0 评论 -
春招面试复习:递归算法详解
前言递归是一种非常重要的算法思想,无论你是前端开发,还是后端开发,都需要掌握它。在日常工作中,统计文件夹大小,解析xml文件等等,都需要用到递归算法。它太基础太重要了,这也是为什么面试的时候,面试官经常让我们手写递归算法。本文呢,将跟大家一起学习递归算法~什么是递归?递归的特点递归与栈的关系递归应用场景递归解题思路leetcode案例分析递归可能存在的问题以及解决方案什么是递归?递归,在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。简单来说,递归表现为函数调用原创 2020-12-19 21:46:39 · 950 阅读 · 1 评论 -
【剑指offer】三数之和 (图文详解,java和python实现)
01、题目示例该题为 二数之和 的进阶版本,当然还有一个进阶版本为 四数之和。我们将会一一进行分析!第15题:三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2原创 2020-09-01 20:02:29 · 395 阅读 · 0 评论 -
通过leetcode题目来学习平衡二叉树,几道题搞定它!
平衡二叉树专题力扣关于平衡二叉树的题目还是有一些的,并且都非常经典,推荐大家练习。今天给大家精选了 4 道题,如果你彻底搞明白了这几道题,碰到其他的平衡二叉树的题目应该不至于没有思路。当你领会了我的思路之后, 建议再找几个题目练手,巩固一下学习成果。110. 平衡二叉树(简单)最简单的莫过于判断一个树是否为平衡二叉树了,我们来看下。题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。原创 2020-08-25 21:13:57 · 1119 阅读 · 0 评论 -
【leetcode】406.根据身高重建队列 (贪心算法,java实现)
406. 根据身高重建队列难度中等442假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]方法:贪心算法这个问题是让我们重建队列。让我们从最简单的情况原创 2020-08-22 20:39:33 · 611 阅读 · 0 评论 -
【leetcode】42.接雨水 (单调栈等多种解法,java实现)
406. 根据身高重建队列难度中等442假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]???? 文字题解方法 1:暴力直观想法直接按问题描述进行。原创 2020-08-22 20:35:33 · 687 阅读 · 0 评论 -
【leetcode】84.柱状图中最大的矩形 (多种解法,java实现,单调栈)
84. 柱状图中最大的矩形难度困难给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10方法一:暴力解法这道问题的暴力解法比「接雨水」那道题要其实好想得多:可以枚举以每个柱形为高度的最大矩形的面积。具原创 2020-08-22 20:34:52 · 827 阅读 · 0 评论 -
【leetcode】218.天际线问题 (经典面试题,多种解法详细解释,java实现)
218. 天际线问题难度困难256城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建筑物形成的天际线(图B)。每个建筑物的几何信息用三元组 [Li,Ri,Hi] 表示,其中 Li 和 Ri 分别是第 i 座建筑物左右边缘的 x 坐标,Hi 是其高度。可以保证 0 ≤ Li, Ri ≤ INT_MAX, 0 < Hi ≤ INT_MAX 和 Ri - Li > 0。您可以假设所有原创 2020-08-22 20:34:05 · 1082 阅读 · 0 评论 -
【leetcode】341.扁平化嵌套列表迭代器 (递归,栈,java实现)
341. 扁平化嵌套列表迭代器难度中等给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。示例 1:输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。示例 2:输入: [1,[4,[6]]]输出: [1,4,6]解释:原创 2020-08-21 22:37:59 · 342 阅读 · 0 评论 -
【leetcode】146.LRU缓存机制 (哈希表+双向链表,java实现)
146. LRU缓存机制难度中等运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空原创 2020-08-21 22:36:33 · 626 阅读 · 0 评论 -
【leetcode】179.最大数 (数学题,自定义排序,java实现)
179. 最大数难度中等360给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。示例 1:输入: [10,2]输出: 210示例 2:输入: [3,30,34,5,9]输出: 9534330说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。分析自定义排序:想法为了构建最大数字,我们希望越高位的数字越大越好。算法首先,我们将每个整数变成字符串。然后进行排序。如果仅按降序排序,有相同的开头数字的时候会出现问题。比方说,样例 2 按降序排序得到的数字是原创 2020-08-21 20:56:11 · 685 阅读 · 0 评论 -
【leetcode】140.单词拆分 II (动态规划两种方法,java实现)
140. 单词拆分 II难度困难给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = "catsanddog"wordDict = ["cat", "cats", "and", "sand", "dog"]输出:[ "cats and dog", "cat sand dog"原创 2020-08-20 21:14:50 · 562 阅读 · 0 评论 -
【leetcode】139.单词拆分 (DFS+BFS+动态规划图文详解,java实现)
139. 单词拆分难度中等给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepena原创 2020-08-20 20:19:08 · 778 阅读 · 0 评论 -
【leetcode】312.戳气球 (超详细解析,动态规划)
312. 戳气球难度困难有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。求所能获得硬币的最大数量。说明:你可以假设 nums[-1] = nums[n] =原创 2020-08-20 20:18:03 · 3854 阅读 · 2 评论 -
【leetcode】309.最佳买卖股票时机含冷冻期 (动态规划详细解析)
309. 最佳买卖股票时机含冷冻期难度中等给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]说明:这篇题解对状态的定义和状态转原创 2020-08-19 21:55:17 · 426 阅读 · 0 评论 -
【leetcode】152.乘积最大子数组 (动态规划详细解析,java多种方法实现)
152. 乘积最大子数组难度中等715给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。分析思路这个问题很像「力扣」第 53 题:最大子序和,只不过当前这个问题求的是乘积的最大值;「连续」这个概念很重要,可原创 2020-08-19 21:54:48 · 1224 阅读 · 0 评论 -
为了通过面试,要刷多少道leetcode题?一文解答你的疑惑。
想要学习算法、应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗?这里我说下我的个人看法,我认为不稳。下面说说为啥不稳以及算法题应该如何刷、如何学才比较好,当然,也会推荐自己学过的资料。一、先说说笔试题在刷 leetcode 的时候,你会发现,每道题的题意都很短,你只需要花十几秒的时间,就知道这道题是要你干嘛了,并且每道题所用道的算法思想都很明确,动态规划、递归、二分查找等,你可能很快就知道该用哪种原创 2020-08-16 18:27:07 · 9655 阅读 · 4 评论 -
【leetcode】44.通配符匹配(动态规划,贪心法,java实现)
44. 通配符匹配难度困难给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:原创 2020-08-15 21:38:08 · 663 阅读 · 0 评论 -
【leetcode】301.删除无效的括号 (回溯法,详细解析,java实现)
301. 删除无效的括号难度困难删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。说明: 输入可能包含了除 ( 和 ) 以外的字符。示例 1:输入: "()())()"输出: ["()()()", "(())()"]示例 2:输入: "(a)())()"输出: ["(a)()()", "(a())()"]示例 3:输入: ")("输出: [""]解题思路方法一:回溯对于这个问题,我们得到了一个由括号组成的表达式,并且表达式中可能有一些错误的括号或额外的括号原创 2020-08-15 21:37:13 · 934 阅读 · 0 评论 -
【leetcode】131.分割回文串 (回溯法+优化,java实现)
131. 分割回文串难度中等给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]搜索问题主要使用回溯法。回溯法思考的步骤:1、画递归树;2、根据自己画的递归树编码。思考如何根据这棵递归树编码:1、每一个结点表示剩余没有扫描到的字符串,产生分支是截取了剩余字符串的前缀;2、产生前缀字符串的时候,判断前缀字符串是否是回文。如果前缀字符串是原创 2020-08-15 21:36:05 · 594 阅读 · 0 评论 -
【leetcode】324.摆动排序 II (四种解法,快速排序+3way-partition等,java实现)
324. 摆动排序 II难度中等给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。示例 1:输入: nums = [1, 5, 1, 1, 6, 4]输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]示例 2:输入: nums = [1, 3, 2, 2, 3, 1]输出: 一个可能的答案是 [2, 3, 1, 3, 1, 2]说明:你可以假设所有输入都会得到有效的结果原创 2020-08-15 21:29:35 · 968 阅读 · 0 评论 -
【leetcode】240.搜索二维矩阵 II (四种方法开阔思路,java实现)
240. 搜索二维矩阵 II难度中等编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 ta原创 2020-08-15 21:26:56 · 1376 阅读 · 0 评论 -
【leetcode】329.矩阵中的最长递增路径(拓扑排序,记忆化深度优先搜索,java实现)
329. 矩阵中的最长递增路径难度困难306给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9]。示例 2:输入: nums = [ [3,4,5], [3,2,6], [2,2,1]] 输出: 4 解释:原创 2020-08-13 21:51:32 · 643 阅读 · 0 评论 -
【leetcode】547.朋友圈 (bfs+dfs+并查集多种方法,java实现)
547. 朋友圈难度中等289班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。示例 1:输入: [[1,1,0], [1,1,0], [0,0,1]]输原创 2020-08-12 13:09:51 · 980 阅读 · 1 评论 -
【leetcode】124.二叉树中的最大路径和(详细图文解析,java实现)
124. 二叉树中的最大路径和难度困难给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例 2:输入: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7输出: 42分析思路路径每到一个节点,原创 2020-08-12 13:08:51 · 1258 阅读 · 0 评论 -
【leetcode】127.单词接龙 (广度优先遍历+双向广度优先遍历,java实现)
127. 单词接龙难度中等400收藏分享切换为英文关注反馈给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同。示例 1:原创 2020-08-12 13:07:23 · 591 阅读 · 0 评论 -
【leetcode】23.合并K个排序链表(c++和java多种解法,详细解释)
23. 合并K个排序链表难度困难835收藏分享切换为英文关注反馈合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6c++实现文字题解前置知识:合并两个有序链表思路在解决「合并K个排序链表」这个问题之前,我们先来看一个更简单的问题:如何合并两个有序链表?假设链表 a 和原创 2020-08-10 23:02:03 · 387 阅读 · 0 评论 -
【leetcode】76.最小覆盖子串 (多种解法,超详细注释,java实现)
76. 最小覆盖子串难度困难691收藏分享切换为英文关注反馈给你一个字符串 S、一个字符串 T 。请你设计一种算法,可以在 O(n) 的时间复杂度内,从字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入:S = "ADOBECODEBANC", T = "ABC"输出:"BANC"提示:如果 S 中不存这样的子串,则返回空字符串 ""。如果 S 中存在这样的子串,我们保证它是唯一的答案。分析方法一:滑动窗口思路和算法本问题要求我们返回字符串 s 中包含字符串 t 的原创 2020-08-10 21:58:22 · 3270 阅读 · 0 评论 -
【leetcode】239.滑动窗口最大值 (暴力、单调队列,动态规划多种解法,java实现)
239. 滑动窗口最大值难度困难给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值---------------原创 2020-08-10 21:54:51 · 935 阅读 · 0 评论 -
【leetcode】272.基本计算器 II (两种思路,java实现!)
227. 基本计算器 II难度中等163收藏分享切换为英文关注反馈实现一个基本的计算器来计算一个简单的字符串表达式的值。字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。示例 1:输入: "3+2*2"输出: 7示例 2:输入: " 3/2 "输出: 1示例 3:输入: " 3+5 / 2 "输出: 5说明:你可以假设所给定的表达式都是有效的。请不要使用内置的库函数 eval。思路1:将表达式(中缀)转化为后缀将后缀原创 2020-08-10 21:54:10 · 734 阅读 · 0 评论 -
【leetcode】289.生命游戏 (三种解法开阔思路,java实现)
289. 生命游戏难度中等根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;如果活原创 2020-08-08 21:18:48 · 987 阅读 · 0 评论 -
【leetcode】59.螺旋矩阵 (四种解法,java实现)
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]方法一:模拟可以模拟螺旋矩原创 2020-08-07 20:15:57 · 1137 阅读 · 0 评论 -
【leetcode】621.任务调度 (排序,设计,优先队列三种方法,java实现)
621. 任务调度器难度中等给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的最短时间。示例 :输入:tasks = ["A","A原创 2020-08-07 02:24:23 · 1253 阅读 · 0 评论 -
【leetcode】300.最长上升子序列(动态规划多种解法, java实现)
300. 最长上升子序列难度中等给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?分析首先,需要对「子序列」和「子串」这两个概念进行区分;子序列(subsequen原创 2020-08-06 01:21:26 · 1139 阅读 · 0 评论 -
【leetcode】 322.零钱兑换 (动态规划,背包,广度优先搜索等多种解法,java实现)
322. 零钱兑换难度中等给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每种硬币的数量是无限的。方法一:动态规划思路:看题目的问法,只问最优值原创 2020-08-06 01:20:52 · 696 阅读 · 0 评论 -
【leetcode】240.搜索二维矩阵 II (贪心+动态规划,动图详解)
240. 搜索二维矩阵 II难度中等编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 ta原创 2020-08-05 23:28:49 · 570 阅读 · 0 评论 -
【leetcode】75.颜色分类(多种解法,超详细图文解析)
75. 颜色分类难度中等给定一个包含红色、白色和蓝色,一共 n 个元素的数组,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。原创 2020-08-05 23:27:00 · 2044 阅读 · 0 评论 -
【leetcode】46.全排列 (回溯算法详细解析。java实现)
46. 全排列难度中等825收藏分享切换为英文关注反馈给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]分析请读者带着以下问题理解回溯搜索算法的思想。1、什么是“树形问题”?为什么是在树形问题上使用“深度优先遍历”?不用深度优先遍历我们还可以用什么?2、什么是“回溯”?为什么需要回溯?3、不回溯可以吗?首原创 2020-08-04 20:09:54 · 2594 阅读 · 0 评论 -
【leetcode】105.从前序和中序遍历序列构造二叉树(详细图解,java实现)
105. 从前序与中序遍历序列构造二叉树难度中等597收藏分享切换为英文关注反馈根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7分析二叉树相关的很多问题的解决思路都有分治法的思想在里面。我们复习一下分治法的思想:把原问题拆解成若干个与原原创 2020-08-03 00:38:41 · 764 阅读 · 0 评论 -
【leetcode】94.二叉树的中序遍历(递归+迭代+莫里斯遍历,超详细图文解释,java实现)
94. 二叉树的中序遍历难度中等给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归实现递归遍历太简单了前序遍历:打印-左-右中序遍历:左-打印-右后序遍历:左-右-打印题目要求的是中序遍历,那就按照 左-打印-右这种顺序遍历树就可以了,递归函数实现终止条件:当前节点为空时函数内: 递归的调用左节点,打印当前节点,再原创 2020-08-03 00:35:43 · 1245 阅读 · 1 评论