自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 LeetCode - 动态规划 - 871. 最低加油次数

871. 最低加油次数 汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。 沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。 假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。 当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。 为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则

2020-10-01 11:54:43 55

原创 LeetCode - 贪心 - 452. 用最少数量的箭引爆气球

452. 用最少数量的箭引爆气球 在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。 一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无

2020-09-27 15:39:41 21

原创 LeetCode - 贪心 - 45. 跳跃游戏 Ⅲ

这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。 注意,不管是什么情况下,你都无法跳到数组之外。 示例 1: 输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true 解释: 到达值为 0 的下标 3 有以下可能方案: 下标 5 -> 下标 4 -> 下标 1 -> 下标 3 下标

2020-09-26 14:16:37 18

原创 LeetCode - 贪心 - 45. 跳跃游戏 II

45. 跳跃游戏 II 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。 说明: 假设你总是可以到达数组的最后一个位置。 简单介绍: 难度:困难 使用语言:JAVA。 这道题来自leetcode题库的贪心算法标

2020-09-25 09:49:39 13

原创 LeetCode - 贪心 - 55. 跳跃游戏

55. 跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

2020-09-24 10:54:33 17

原创 LeetCode - 贪心 - 402. 移掉K位数字

402. 移掉K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。 示例 1 : 输入: num = “1432219”, k = 3 输出: “1219” 解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。 示例 2 : 输入: num = “10200”, k = 1 输出: “200” 解释: 移掉首位的 1 剩下的数字为 200. 注

2020-09-23 13:57:18 13

原创 LeetCode - 贪心 - 376. 摆动序列

376. 摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。 给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(

2020-09-22 09:56:27 12

原创 LeetCode - 贪心 - 455. 分发饼干

455. 分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。 注意: 你可以假设胃口值为正。 一个小朋友最多只能拥有一块饼干。 示例 1: 输入: [1,2,3], [1,1] 输出:

2020-09-21 13:14:21 13

原创 LeetCode - 堆 - 295. 数据流的中位数

295. 数据流的中位数 中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如: [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。 示例: addNum(1) addNum(2) findMedian() -> 1.5 addNum(

2020-09-20 20:08:54 14

原创 LeetCode - 堆 - 215. 数组中的第K个最大元素

215. 数组中的第K个最大元素 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 简单介绍: 难度:中等 使用语言:JAVA。 这道题来自leetcode题库的堆算法标签。 解题思路: 首

2020-09-19 08:44:24 29

原创 LeetCode - 链表 - 141. 环形链表

题目 141. 环形链表 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 输出:true 解释:链表中有一个环,其尾部连接到第一个节点。 示例 3: 输入:head

2020-09-13 14:39:08 16

原创 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)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],

2020-08-29 13:13:10 24

原创 LeetCode - 链表 - 92. 反转链表 II

题目 92. 反转链表 II 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 简单介绍: 难度:中等 使用语言:JAVA。 这道题来自leetcode题库的链表算法标签。 解题思路: 首先看题、分析题意: 1.如何实现部分反转链表 既然,我们已经分析出来题目

2020-08-28 14:28:47 29

原创 LeetCode - 链表 - 206. 反转链表

题目 206. 反转链表 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? 简单介绍: 难度:简单 使用语言:JAVA。 这道题来自leetcode题库的链表算法标签。 解题思路: 首先看题、分析题意: 1.如何实现反转链表 既然,我们已经分析出来题目的关键任务了,下面我们就可以开始思考实现了。 我们采用

2020-08-27 12:05:20 52

原创 LeetCode - 栈 - 225.用队列实现栈

题目 225.用队列实现栈 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。 你可以假设所有操作

2020-08-26 12:05:57 51

原创 LeetCode - 动态规划 - 95. 不同的二叉搜索树 II

题目 95. 不同的二叉搜索树 II 给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。 提示: 0 <= n <= 8 简单介绍: 难度:中等 使用语言:JAVA。 这道题来自leetcode题库的动态规划算法标签。 解题思路: 首先看题、分析题意: 1.数值不同,长度相同时,二叉搜索树的种类是一定的,所以我们可以采用动态规划的方法 2.把每个数字作为根节点,然后考虑左子树和右子树的可能 既然,我们已经分析出来题目的关键任务了,下面我们就可以开始思考实现了。 我们采

2020-08-24 09:19:25 46

原创 LeetCode - 贪心算法 - 763. 划分字母区间

763. 划分字母区间 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。 示例 1: 输入:S = “ababcbacadefegdehijhklij” 输出:[9,7,8] 解释: 划分结果为 “ababcbaca”,“defegde”, “hijhklij”。 每个字母最多出现在一个片段中。 像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。 提示:

2020-08-22 10:38:19 47

原创 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-18 09:53:55 30

原创 LeetCode - 双指针 - 524. 通过删除字母匹配到字典里最长单词

524. 通过删除字母匹配到字典里最长单词 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串 示例 1: 输入: s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”] 输出: “apple” 示例 2: 输入: s = “abpcplea”, d = [“a”,“b”,“c”] 输出: “a” 说明: 所

2020-08-15 11:49:02 57

原创 LeetCode - 图 - 133. 克隆图

题目 133. 克隆图 给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。 图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。 class Node { public int val; public List<Node> neighbors; } 测试用例格式: 简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示

2020-08-13 11:07:29 37

原创 LeetCode - 字符串- 93. 复原IP地址

题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。 有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。 示例: 输入: “25525511135” 输出: [“255.255.11.135”, “255.255.111.35”] 简单介绍: 难度:中等 使用语言:JAVA。 这道题来自leetcode题库的字符串标签。 解题思路: 首先看题、分析题意: 1.可以转换成树的结构来进行解答 2.进行深度有限遍历,采用回溯算法 既然,

2020-08-09 07:56:28 52

原创 LeetCode - 树- 100. 相同的树

题目 100. 相同的树 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] 输出: true 示例 2: 输入: 1 1 / \ 2 2 [1,2], [1,null,2] 输出: false 示例 3: 输入: 1 1 / \

2020-08-07 11:29:47 29

原创 LeetCode - 字符串- 字符串相加

415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 提示: num1 和num2 的长度都小于 5100 num1 和num2 都只包含数字 0-9 num1 和num2 都不包含任何前导零 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式 简单介绍: 难度:简单 使用语言:JAVA。 这道题来自leetcode题库的字符串标签。 解题思路: 首先看题、分析题意: 1.其实就是一道大数相加的题目,只是题目帮我们转成字符串了 既

2020-08-04 09:22:43 52

原创 LeetCode -深度有限搜索 - 329. 矩阵中的最长递增路径

题目 329. 矩阵中的最长递增路径 给定一个整数矩阵,找出最长递增路径的长度。 对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。 示例 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 解释: 最长递增路径是 [3, 4, 5, 6]

2020-07-31 13:24:38 62

原创 LeetCode - 数学 - 343. 整数拆分

题目 343. 整数拆分 给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 说明: 你可以假设 n 不小于 2 且不大于 58。 简单介绍: 难度:中等 使用语言:JAVA。 这道题来自leetcode题库的数学标签。 解题思路: 首先看题、分

2020-07-30 10:13:28 56

原创 LeetCode - 双指针 - 392. 判断子序列

题目 392. 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 示例 1: s = “abc”, t = “ahbgdc” 返回 true. 示例 2: s = “

2020-07-27 08:27:25 24

原创 LeetCode - 博弈论 - 1025. 除数博弈

1025. 除数博弈 爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 。 用 N - x 替换黑板上的数字 N 。 如果玩家无法执行这些操作,就会输掉游戏。 只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。 示例 1: 输入:2 输出:true 解释:爱丽丝选择 1,鲍勃无法进行操作。 示例

2020-07-25 09:50:32 38

原创 LeetCode - 二分查找 - 剑指 Offer 11. 旋转数组的最小数字

题目 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 示例 1: 输入:[3,4,5,1,2] 输出:1 示例 2: 输入:[2,2,2,0,1] 输出:0 简单介绍: 难度:简单 使用语言:JAVA。 这道题来自leetcode题库的二分查找标签。 解题思路: 首先看题、分析题意,

2020-07-22 16:49:47 29

原创 LeetCode - 二分查找 - 167. 两数之和 II - 输入有序数组

题目 167. 两数之和 II - 输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例: 输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2] 解释: 2 与 7 之和

2020-07-20 11:54:18 30

原创 LeetCode - 二分查找 - 35. 搜索插入位置

题目 35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例: 输入: [1,3,5,6], 5 输出: 2 示例 2: 输入: [1,3,5,6], 2 输出: 1 示例 3: 输入: [1,3,5,6], 7 输出: 4 示例 4: 输入: [1,3,5,6], 0 输出: 0 简单介绍: 难度:简单 使用语言:JAVA。 这道题来自leetcode题库的图标签。

2020-07-17 15:44:39 30

原创 LeetCode - 动态规划 - 96. 不同的二叉搜索树

题目 96. 不同的二叉搜索树 给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 简单介绍: 难度:中等 使用语言:JAVA。 这道题来自leetcode题库的图标签。 解题思路: 首先看题、分析题意,我们可以明确几个关键点: 1.二叉搜索树的特性,左子树比根结点小,右子树比根结点大 2.在构建二叉树的时候,根据根的值不同,我们能保证每棵二叉搜索树是唯一的 既然,我们已经分析出来题目的

2020-07-15 11:36:37 44

原创 Leetcode - 哈希表 - 350. 两个数组的交集 II

题目 350. 两个数组的交集 II 难度 简单 给定两个数组,编写一个函数来计算它们的交集 示例1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小

2020-07-13 21:33:07 45

原创 LeetCode - 星期总结01

题目 309. 最佳买卖股票时机含冷冻期 难度 中等 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出] 动态规划的问题 对于动态规划

2020-07-12 16:49:00 30

原创 LeetCode - 归并排序 + 索引数组 - 315. 计算右侧小于当前元素的个数

题目 315. 计算右侧小于当前元素的个数 难度 困难 给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例: 输入: [5,2,6,1] 输出: [2,1,1,0] 解释: 5 的右侧有 2 个更小的元素 (2 和 1). 2 的右侧仅有 1 个更小的元素 (1). 6 的右侧有 1 个更小的元素 (1). 1 的右侧有 0 个更小的元素. 解题思路 普通遍历算法肯定

2020-07-11 14:00:47 61

转载 LeetCode - 动态规划 - 309. 最佳买卖股票时机含冷冻期

题目 309. 最佳买卖股票时机含冷冻期 难度 中等 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。 示例: 输入: [1,2,3,0,2] 输出: 3 解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出] 解题思路 题目中定义的“冷冻

2020-07-10 11:34:49 51

原创 LeetCode - 二分法 - 287. 寻找重复数

题目 287. 寻找重复数 难度 中等 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。 示例1: 输入: [1,3,4,2,2] 输出: 2 示例2: 输入: [3,1,3,4,2] 输出: 3 说明: 不能更改原数组(假设数组是只读的)。 只能使用额外的 O(1) 的空间。 时间复杂度小于 O(n2) 。 数组中只有一个重复的数字,但它可能不止重复出现一次。 解题思路 这

2020-05-29 09:55:43 73

原创 LeetCode - 树 - 105. 从前序与中序遍历序列构造二叉树

题目 105. 从前序与中序遍历序列构造二叉树 难度 中等 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 解题思路 学过数据结构之后,可以容易想到前序遍历是:根左右,中序遍历是左根右。所以可以根据这个性质来构建我们的二叉树。通过前序遍

2020-05-25 11:04:29 62

原创 LeetCode - 字符串 - 1371. 每个元音包含偶数次的最长子字符串

题目 1371. 每个元音包含偶数次的最长子字符串 难度 中等 给你一个字符串 s ,请你返回满足以下条件的最长子字符串的长度:每个元音字母,即 ‘a’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出现了偶数次。 示例1: 输入:s = “eleetminicoworoep” 输出:13 解释:最长子字符串是 “leetminicowor” ,它包含 e,i,o 各 2 个,以及 0 个 a,u 示例2: 输入:s = “leetcodeisgreat” 输出:5 解释:最长子字符串是 “le

2020-05-20 16:31:13 178

原创 LeetCode - 动态规划 - 152. 乘积最大子序列

题目 152. 乘积最大子序列 难度 中等 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 示例1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例2: 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 解题思路 动态规划 遍历数组时计算当前最大值,不断更新,维护最大值 **由于存在负数,那么会导致最大的变最小的,最小的变最大

2020-05-18 11:21:13 37

原创 LeetCode - 链表 - 25. K 个一组翻转链表

题目 25. K 个一组翻转链表 难度 困难 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 示例: 给你这个链表:1->2->3->4->5 当 k = 2 时,应当返回: 2->1->4->3->5 当 k = 3 时,应当返回: 3->2->1->4->5 说明: 你的算法只能使用常数的额

2020-05-16 11:15:22 207

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除