![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode top100记录
又要开始刷题了!!!
liyinan11
这个作者很懒,什么都没留下…
展开
-
406. 根据身高重建队列
题目:假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列 思路:贪婪 具体:先按身高从高到低排,相同身高根据k从小到大排,再挨个插入 代码: class Solution(object): def reconstructQueue(self, people): """ :type people: List[List[int]]原创 2020-09-22 22:50:17 · 108 阅读 · 0 评论 -
【LeetCode】64. 最小路径和
题目: 给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 思路:动态规划 具体:构建二维数组,存到该位置的最小路径和 代码: class Solution(object): def minPathSum(self, grid): """ :type grid: List[List[int]] :rtype: int """ ...原创 2020-09-13 21:19:57 · 111 阅读 · 0 评论 -
【LeetCode】105. 从前序与中序遍历序列构造二叉树
题目:根据一棵树的前序遍历与中序遍历构造二叉树。无重复元素 思路: 分治/递归:前序第一个元素为头结点,在中序中找到左子树和右子树的位置,分别构造,使用dict记录中序位置映射可优化,不需要每次从头查(无重复时) 迭代:利用栈,前序第一个元素为头结点,先找到最深的左节点,依次入栈,然后构造右子树 代码: # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): #原创 2020-09-13 20:51:54 · 140 阅读 · 0 评论 -
【LeetCode】96. 不同的二叉搜索树
题目:给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种? 思路: 递归:超时不可取,原因类似斐波那契数列 分治/动态规划:将n分解为i和n-i,结果为左右子数乘积,再求和 卡特兰数:公式 代码: class Solution(object): def numTrees(self, n): """ :type n: int :rtype: int """ if n <= 1: ret...原创 2020-09-13 19:23:58 · 112 阅读 · 1 评论 -
【LeetCode】48. 旋转图像
题目: 给定一个n×n的二维矩阵表示一个图像。将图像顺时针旋转 90 度。 思路: 按圈旋转:对每一圈进行旋转,找规律,四条边的旋转 翻转:先上下翻转,再对角线交换 代码: class Solution(object): def rotate(self, matrix): """ :type matrix: List[List[int]] :rtype: None Do not return anything, modify mat...原创 2020-09-13 18:48:08 · 80 阅读 · 0 评论 -
【LeetCode】238. 除自身以外数组的乘积
题目:给你一个长度为n的整数数组nums,其中n > 1,返回输出数组output,其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。 思路:先正向遍历,得到前i个元素乘积的数组,再反向遍历,得到后i-1个元素乘积,一前一后相乘得到结果 优化点:双指针可少一次遍历 代码: class Solution(object): def productExceptSelf(self, nums): """ :typ...原创 2020-09-13 13:21:36 · 110 阅读 · 0 评论 -
【LeetCode】类型总结
1、动态规划 338. 比特位计数https://blog.csdn.net/liyinan11/article/details/108429660 2、递归 94. 二叉树的中序遍历https://blog.csdn.net/liyinan11/article/details/108430177 3、回溯 39. 组合总和https://blog.csdn.net/liyinan11/article/details/108561231 ...原创 2020-09-13 12:54:04 · 105 阅读 · 0 评论 -
【LeetCode】39. 组合总和
题目:给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。 思路:回溯 具体:path为遍历数组(栈),先对输入数组排序,当path合大于target时剪枝,等于target时导入res并pop,小于target时继续 代码: class Solution(object): def combinationSum(self, candidate...原创 2020-09-13 12:52:57 · 85 阅读 · 0 评论 -
114. 二叉树展开为链表
题目:给定一个二叉树,原地将它展开为一个单链表。 思路: 先序遍历存起来,然后生成链表 递归:从下往上,先将左右子树分别展开,如果左子树存在,找到左子树最右节点,将根节点右子树接到该节点之后,同时转换左子树为右子树,左子树设空 非递归:从上往下,先找到左子树最右节点,与递归思路类似,转换后,根节点下移,直至为空 代码: 递归 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self原创 2020-09-06 22:28:40 · 53 阅读 · 0 评论 -
【LeetCode】94. 二叉树的中序遍历
题目:给定一个二叉树,返回它的中序遍历。 思路: 递归 迭代:构建一个栈,依次遍历存入左节点,到底弹出栈顶,并开始遍历右节点 递归 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solutio.原创 2020-09-06 13:30:19 · 102 阅读 · 0 评论 -
【LeetCode】338. 比特位计数
题目:给定一个非负整数num。对于0 ≤ i ≤ num范围中的每个数字i,计算其二进制数中的 1 的数目并将它们作为数组返回。 思路:动态规划+位运算 具体:对于整数k,1的总数目分为两部分——最后一位是否为1+前n位1的总数(通过右移一位) class Solution(object): def countBits(self, num): """ :type num: int :rtype: List[int] ...原创 2020-09-06 11:51:25 · 78 阅读 · 0 评论