
leetcode
flipped_Sun
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试题 04.06. 后继者
题目描述: 设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。 如果指定节点没有对应的“下一个”节点,则返回null。 示例 1: 输入: root = [2,1,3], p = 1 2 / \ 1 3 输出: 2 示例 2: 输入: root = [5,3,6,2,4,null,null,1], p = 6 5 / \ 3 6 / \ 2 4 / 1 输出: null ...原创 2020-11-23 22:05:52 · 149 阅读 · 0 评论 -
739. 每日温度
题目描述: 1.每日温度:请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。 例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。 提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。 解题思路: 单调...原创 2020-09-27 09:34:52 · 273 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder =[3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 解题思路: 递归 class Solution: def buildTree(self, preorder: List[int], inorder: List[...原创 2020-09-25 17:00:53 · 235 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
题目描述: 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder =[9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 解题思路: 递归(注意这里要先构建右子树) class Solution: def buildTree(self, inorder: List[int], p...原创 2020-09-25 16:59:04 · 153 阅读 · 0 评论 -
404. 左叶子之和
题目描述: 计算给定二叉树的所有左叶子之和。 示例: 3 / \ 9 20 / \ 15 7 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 解题思路: 深度优先搜索 对于节点node,其左叶子节点可以表示如下: node.leftand (notnode.left.leftandnotnode.left.right) 对整棵树进行遍历,当我们遍历到节点\textit{node}node时,如果它的左子节点是一个叶子...原创 2020-09-19 19:18:07 · 117 阅读 · 0 评论 -
199. 二叉树的右视图
题目描述: 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例: 输入:[1,2,3,null,5,null,4] 输出:[1, 3, 4] 解释: 1 <--- / \ 2 3 <--- \ \ 5 4 <--- 解题思路: 层序遍历:每一层访问到的最后一个节点即为能看到的最右侧元素 class Solution: def ...原创 2020-09-16 21:30:37 · 145 阅读 · 0 评论 -
345. 反转字符串中的元音字母
题目描述: 编写一个函数,以字符串作为输入,反转该字符串中的元音字母。 示例 1: 输入:"hello" 输出:"holle" 示例 2: 输入:"leetcode" 输出:"leotcede" 解题思路: 先将字符串中元音字母换为#,并将其存到另一个字符串S'中,最后再将S‘倒序更换字符串中的# class Solution: def reverseVowels(self, s: str) -> str: vowel=['a','e','i','o','u',原创 2020-09-13 21:36:04 · 179 阅读 · 0 评论 -
434. 字符串中的单词数
题目描述: 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。 请注意,你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: "Hello, my name is John" 输出: 5 解释: 这里的单词是指连续的不是空格的字符,所以 "Hello," 算作 1 个单词。 解题思路: 遍历整个字符串,检测每个下标,若该下标前为空格(或者为初始下标),且自身不为空格,则其为单词的下标 class Solution: def countSegments(self,原创 2020-09-13 21:17:22 · 136 阅读 · 0 评论 -
58. 最后一个单词的长度
题目描述: 给定一个仅包含大小写字母和空格' '的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词,请返回 0。 说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。 示例: 输入: "Hello World" 输出: 5 输入: "Hello " 输出: 5 解题思路: 字符串遍历,先将末尾的空格过滤掉,再从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词的长度 class S...原创 2020-09-13 20:50:43 · 394 阅读 · 0 评论 -
459. 重复的子字符串
题目描述: 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。 示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。 示例 2: 输入: "aba" 输出: False 示例 3: 输入: "abcabcabcabc" 输出: True 解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。) 解题思路: 枚举: 子串原创 2020-09-13 20:25:34 · 136 阅读 · 0 评论 -
leetcode 322. 零钱兑换
题目描述: 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 示例1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 解题思路: 动态规划 class Solution: def coinChange(self,...原创 2020-09-06 21:58:19 · 116 阅读 · 0 评论 -
leetcode 连续数列
题目描述: 给定一个整数数组,找出总和最大的连续数列,并返回总和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 解题思路: 动态规划 状态转移方程: dp[i]=max(dp[i-1]+nums[i],nums[i]) dp[i]表示以i结尾的最大连续子序列,每一个元素都可以选择和前i个子序列相连或者不相连。 class Solution: def maxSubArray(self, n原创 2020-09-06 21:19:54 · 527 阅读 · 0 评论 -
leetcode 322. 零钱兑换
题目描述: 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 示例1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 解题思路: 动态规划 若所需的最少的硬币个数,则应优先使用面值大的硬币,因此首先对数组进行从大到小排序。...原创 2020-08-26 10:53:17 · 158 阅读 · 0 评论 -
leetcode 63. 不同路径 II
题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 解题思路: 同62题,当遇到障碍时路径数置0。 class Solution(object): def uniquePathsWithObstacles(self, obstacleGrid): "原创 2020-08-25 19:47:34 · 151 阅读 · 0 评论 -
leetcode 98. 验证二叉搜索树
题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例1: 输入: 2 / \ 1 3 输出: true 解题思路: 设计一个递归函数来递归判断,考虑以 root 为根的子树,判断子树中所有节点的值是否都在 (l,r)的范围内(注意是开区间)。如果 root 节点的值 val 不在 (l,r...原创 2020-08-21 17:22:40 · 150 阅读 · 0 评论 -
leetcode 62. 不同路径
题目描述: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 解题思路: 动态规划 由于机器人每次只能向下或者向右移动一步,所以机器人移动到当前网格处(i,j)只能从上一行(i-1,j)或前一列(i,j-1)移动得到,因此到达该网格处的路径个数为移动到(i-1,j)和(i,j-1)对应的路径数之和。 考虑特殊情况,处于第一行原创 2020-08-21 15:51:59 · 154 阅读 · 0 评论 -
leetcode 22. 括号生成
题目描述 数字 n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例: 输入:n = 3 输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ] 解题思路 回溯法 通过跟踪到目前为止放置的左括号和右括号的数目,如果左括号数量不大于 n,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号。 cl...原创 2020-08-19 21:07:26 · 235 阅读 · 0 评论 -
leetcode 647. 回文子串
题目描述: 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1: 输入:"abc" 输出:3 解释:三个回文子串: "a", "b", "c" 示例 2: 输入:"aaa" 输出:6 解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa" 解题思路: 动态规划 一个字符串是回文串,它的首尾字符相同,且剩余子串也是一个回文串。因此,求一个字符串是否是回文串可以分原创 2020-08-19 20:14:44 · 138 阅读 · 0 评论 -
leetcode 337. 打家劫舍 III
题目描述: 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。 计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。 示例 1: 输入: [3,2,3,null,3,null,1] 3 / \ 2 3 \ ...原创 2020-08-05 15:41:41 · 126 阅读 · 0 评论 -
leetcode 96. 不同的二叉搜索树
题目描述: 给定一个整数 n,求以1 ...n为节点组成的二叉搜索树有多少种? 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ ...原创 2020-07-31 10:52:05 · 94 阅读 · 0 评论 -
leetcode 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。 解题思路: 动态规划 对于的正整数 n,当n>=2时,令 i是拆分出的第一个正整数,则剩下的部分是 n-i,n-i 可...原创 2020-07-30 19:57:31 · 124 阅读 · 0 评论 -
leetcode 17. 电话号码的字母组合
题目描述: 给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 解题思路: 递归+回溯思想 class Solution(object): def letterCombinatio..原创 2020-07-29 20:20:13 · 110 阅读 · 0 评论 -
leetcode 6. Z 字形变换
题目描述: 将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 请你实现这个将字符串进行指定行数变换的函数: string convert(string s, int numRows); 示例1: 输...原创 2020-07-28 22:15:26 · 153 阅读 · 0 评论 -
leetcode 104. 二叉树的最大深度
题目描述: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明:叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 解题思路: 方法一:递归 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self,...原创 2020-07-28 21:24:01 · 104 阅读 · 0 评论 -
leetcode 238. 除自身以外数组的乘积
题目描述: 给你一个长度为n的整数数组nums,其中n > 1,返回输出数组output,其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。 说明: 请不要使用除法,且在O(n) 时间复杂度内完成此题。 解题思路: 直观上来看,先计算给定数组所有元素的乘积,然后对数组...原创 2020-07-27 12:27:15 · 177 阅读 · 0 评论 -
leetcode 3. 无重复字符的最长子串
题目描述: 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 解题思路: 滑动窗口 方法一: class Solution: def lengthOfLongestSubstring(self, s: str) -> int: maxlen,r,l=0,0,len(s) res=[] for ...原创 2020-07-26 17:19:41 · 112 阅读 · 0 评论 -
leetcode. 旋转数组的最小数字
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[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 解题思路: 方法一:线性查找 易知最小值所在的地方一定是数值阶跃的位置,因此可以直接对数组进行线性查找,若某处值小于前一个值,则该值即为数...原创 2020-07-22 20:07:09 · 140 阅读 · 0 评论 -
leetcode 28:实现 strStr() 函数。
题目描述: 给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。 示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2 解题思路: 方法一:子串逐一匹配 将长度为 L 的滑动窗口沿着 haystack 字符串逐步移动,并将窗口内的子串与 needle 字符串相比较,时间复杂度为O((N−L)L) class Soluti...原创 2020-07-22 20:36:39 · 194 阅读 · 0 评论 -
leetcode 64. 最小路径和
题目描述: 给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 解题思路: 动态规划 class Solution(object): def minPathSum(self, grid): """ :type g...原创 2020-07-23 16:31:31 · 129 阅读 · 0 评论 -
leetcode 41. 缺失的第一个正数
题目描述: 给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。 示例1: 输入: [1,2,0] 输出: 3 解题思路: 先对数组进行排序 然后从大于0的位置开始遍历数组如果存在相邻数值相减大于1,那么返回前一个数值+1,如果遍历完也不存在这种情况,那么缺失值为数组最后一个元素值+1 class Solution(object): def firstMissingPositive(self, nums): """ :type nums: .原创 2020-07-23 19:16:28 · 118 阅读 · 0 评论 -
leetcode 392. 判断子序列
题目描述: 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 示例1: s = "abc", t = "ahbgdc" 返回true. 解题思路: 方法一:暴力求解 ..原创 2020-07-23 20:07:39 · 119 阅读 · 0 评论 -
leetcode 746. 使用最小花费爬楼梯
题目描述: 数组的每个索引作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 示例1: 输入: cost = [10, 15, 20] 输出: 15 解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。 示例 2: 输入: cost = [1...原创 2020-07-23 21:28:25 · 108 阅读 · 0 评论 -
leetcode 1025. 除数博弈
题目描述: 爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字N。在每个玩家的回合,玩家需要执行以下操作: 选出任一x,满足0 < x < N 且N % x == 0。 用 N - x替换黑板上的数字 N 。 如果玩家无法执行这些操作,就会输掉游戏。 只有在爱丽丝在游戏中取得胜利时才返回True,否则返回 false。假设两个玩家都以最佳状态参与游戏。 示例 1: 输入:2 输出:true 解释:爱丽丝选择 1,鲍勃无法进行操作。 示例 2...原创 2020-07-24 22:04:38 · 106 阅读 · 0 评论