![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode刷题
小菜鸟的leetcode刷题之路
Onwarder
这个作者很懒,什么都没留下…
展开
-
LeetCode刷题——894. 所有可能的满二叉树
一、原题链接 [所有可能的满二叉树](https://leetcode-cn.com/problems/all-possible-full-binary-trees/)二、题解 由题目描述可知,一个满二叉树的子树一定也是一个满二叉树。假定函数FBT(N)返回包含N个结点的所有可能满二叉树的数量,则容易推导出以下公式: FBT(N) = 1 + FBT(x) + FBT(N-1-x)。 上述式子中,FBT(x)表示其左子树若含有x个结点时,能组成的所有的满二叉树的数目,FB原创 2020-07-22 10:51:38 · 355 阅读 · 0 评论 -
Leetcode刷题——437. 路径总和Ⅲ
一、原题链接 [437.路径总和Ⅲ](https://leetcode-cn.com/problems/path-sum-iii/)二、解题思路 总体而言,解这道题目是利用前缀和的思想。所谓前缀和,就是指在一条路径上的有某个元素A,A之前所有元素的和(包括A),称之为前缀和。 路径上存在元素A和B(A和B有前后关系),如果A和B的前缀和相等,那么我们可以推测出A、B之间的元素和为0;如果元素B的前缀和比A的前缀和多sum,则说明A、B之间的元素和为sum。 1、用栈迭原创 2020-07-21 23:38:10 · 258 阅读 · 0 评论 -
leetcode刷题——560、和为k的子数组(前缀和思想和哈希表)
一、原题链接 [和为k的子数组](https://leetcode-cn.com/problems/subarray-sum-equals-k/)二、思路 直接暴力遍历的话会超时。因此使用前缀和思想和哈希表结合的方式去解这道题。具体解释来说: 1、程序中定义前缀和数组prefix_sum,prefix_sum[i]用于记录数组nums[0]~nums[i]的和; 2、我们需要找到数组中和为k的连续子数组,用前缀和数组来解释的话就是:在数组中找是否存在下标i和j,i小于j,使得pr原创 2020-07-18 21:54:25 · 207 阅读 · 0 评论 -
leetcode刷题——路径总和2
相对于路径总和的不同就在于需要保存符合条件的路径上的值。基本思想仍然是使用深搜,代码如下:# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def p...原创 2020-07-17 19:59:43 · 163 阅读 · 0 评论 -
leetcode 901. 股票价格跨度(单调栈解法详解)
一、注如果您还不知道什么是单调栈;如果你想要了解leetcode中单调栈题目的汇总,可以看博主的这篇博客。 何谓单调栈?leetcode单调栈题目汇总二、原题原题链接 901. 股票价格跨度编写一个 StockSpanner 类,它收集某些股票的每日报价,并返回该股票当日价格的跨度。今天股票价格的跨度被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。例如,如果未来7天股票的价格是 [100, 80, 60, 70, 60, 75, ...原创 2020-06-22 11:22:32 · 665 阅读 · 0 评论 -
leetcode503. 下一个更大元素Ⅱ(单调栈解法详解)
一、注如果您还不知道什么是单调栈;如果你想要了解leetcode中单调栈题目的汇总,可以看博主的这篇博客。 何谓单调栈?leetcode单调栈题目汇总二、原题原题链接 503. 下一个更大元素Ⅱ给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。来源:力扣(LeetCode)...原创 2020-06-22 09:31:58 · 415 阅读 · 0 评论 -
leetcode739. 每日温度(单调栈详解)
一、注如果您还不知道什么是单调栈;如果你想要了解leetcode中单调栈题目的汇总,可以看博主的这篇博客。 何谓单调栈?leetcode单调栈题目汇总二、原题原题链接 739. 每日温度请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该...原创 2020-06-22 09:26:38 · 483 阅读 · 1 评论 -
leetcode 496.下一个更大元素(单调栈解法)
一、注如果您还不知道什么是单调栈;如果你想要了解leetcode中单调栈题目的汇总,可以看博主的这篇博客。 何谓单调栈?leetcode单调栈题目汇总二、原题原题链接 496. 下一个更大元素 I 给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x...原创 2020-06-22 00:05:46 · 342 阅读 · 0 评论 -
何谓单调栈?leetcode单调栈题目汇总
一、单调栈 我们知道,栈是一种基本的数据结构,其最大的特点就是“先进后出”,因为栈中的元素只能在一端进行操作,所有的元素只能在栈顶进出。 普通的栈对于栈内的元素值没有任何要求。而单调栈不同,它要求栈内的元素具有单调性。 单增栈:栈内的元素从栈底到栈顶满足单调递增。 单减栈:栈内的元素从栈底到栈顶满足单调递减。 那么,单调栈有啥用呢?简单来说,单调栈在查找比当前元素更大(小)的下(前)一个元素上有奇效。二、...原创 2020-06-21 23:54:24 · 1400 阅读 · 0 评论 -
二分法介绍 与 leetcode 排列硬币的三种解法
一、定义 二分查找又称折半查找,在处理有序且可以通过下标对元素进行访问的序列时(如有序数组),二分法会有非常好的效果。二、思路 以在一长度为n的非递减数组A中查找是否有某元素K为例,二分查找的基本思路可以概括为: 1、定义好查找的边界left、right后,首先从中间位置mid开始查找 2、如果A[mid]的值等于K,说明已经找到该值,返回mid即可 3、如果A[mid]的值大于K,因为数组A是非递减的...原创 2020-06-21 11:49:43 · 1093 阅读 · 0 评论 -
leetcode刷题 —— 16.04 井字游戏与python中*和**的使用总结
一、原题 原题链接: https://leetcode-cn.com/problems/tic-tac-toe-lcci/二、解法 1、个人思路 看到这道题目后没有想到什么简单有效的方法,于是直接暴力求解:依次处理每一行、每一列以及两条对角线上的字符即可,代码如下:class Solution(object): def tictactoe(self, board): """ :type board: Lis...原创 2020-06-18 16:42:01 · 335 阅读 · 0 评论 -
leetcode刷题1144、 递减元素使数组呈锯齿状(暴力遍历)
一、原题 原题链接:https://leetcode-cn.com/problems/decrease-elements-to-make-array-zigzag/ 给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1。如果符合下列情况之一,则数组 A 就是锯齿数组: 每个偶数索引对应的元素都大于相邻的元素,即 A[0] > A[1] < A[2] > A[3] < A...原创 2020-06-18 16:29:35 · 488 阅读 · 0 评论 -
leetcode刷题: 1160、拼写单词 与 python的for-else使用
一、原题 原题链接:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters/ 描述: 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。 注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个...原创 2020-06-12 21:24:25 · 226 阅读 · 0 评论 -
leetcode刷题:88 合并两个有序数组
一、原题 原题链接:https://leetcode-cn.com/problems/merge-sorted-array/ 给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 nums1 成为一个有序数组。二、思路 解法一:归并排序 这种解法运用到了归并排序的思想:使用双指针同时遍历两个数组,比较指针指向元素的大小,将小的元素放到正确的位置即可。class Solution...原创 2020-06-12 17:06:47 · 304 阅读 · 0 评论 -
leetcode刷题: 0~n-1中缺失的数字
题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。思路暴力法:遍历最简单的方法就是遍历一遍数组,找到不存在的数字。思路一是想着依次比较数组中相邻的两个数,如果nums[i]与num[i-1]的差大于1,那么缺少的数就一定是num[i]-1。同时还需要考虑第一个数是不是0以及是否缺少n的特殊情况。此时,代码的时间效率极低,88ms。class Solution: .原创 2020-06-10 16:37:55 · 1376 阅读 · 1 评论 -
leetcode1051.高度检查器——python解法 + 计数排序
一、题目原题链接 学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。 注意,当一组学生被选中时,他们之间可以以任何可能的方式重新排序,而未被选中的学生应该保持不动。二、思路1.解法一:先排序,再遍历找不同 本题比较简单,看到示例后可知,我们只需将给定的List进行非递减排序得到新的List:target,之后同时遍历heights和target中的元素,若同一下标处两个List的元素不等,则计数器加一。参考代码如下:原创 2020-06-11 18:46:53 · 348 阅读 · 0 评论