- 博客(12)
- 收藏
- 关注
原创 [递归/二叉树]LeetCode 236.二叉树的最近公共祖先
题面给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree题目分析一开始想用并查集,然而发现递归挺好使的注意到两个条件可以更新返回值且唯一:某个节点左右两边
2020-09-28 15:16:51 110
原创 [DP/数学]LeetCode 98.验证二叉搜索树
题面给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2
2020-09-27 17:27:08 116
原创 [二叉树]LeetCode 98.验证二叉搜索树
题面给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素链接:https://leetcode-cn.com/problems/majority-element题目分析很有意思的一道题啊,问了学校的大佬,大佬们纷纷质疑空间复杂度O(1)是否可以做做出来…具体做法如下:随机选取一个数字num(这里取第一个数字),如果接下来遍历的数字等于这个数,则计数器加一,否则减一,当计数器为负数的时候,
2020-09-19 08:26:10 131
原创 [排序]LeetCode 767.重构字符串
题面给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。链接:https://leetcode-cn.com/problems/reorganize-string/solution/题目分析通过分析题目可以知道,在原字符串种字母出现的顺序是无关紧要的,因此我们可以运用桶思想或者开一个map来表示字母和字母数量之间的关系。当一个字母的数量占到整个字符串的数量的一半以上的时候,可以证明无论怎让都无法找到一个满足题意的字符串AC代
2020-07-23 11:23:12 119
原创 [排序]LeetCode 147.对链表进行插入排序
题面对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。链接:https://leetcode-cn.com/problems/inser
2020-07-20 22:59:32 77
原创 [贪心][排序]Offer 45.把数组排成最小的数
题面输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。链接:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/题目分析这道题目是贪心和排序的综合题目。为什么贪心:我们在这里其实是按照另一种规则来进行排序,不妨用冒泡排序的思想来思考这个问题,通过不停的交换来最终实现从小到达的排序。原先的从小到大排序肯定是不行的,我们需要重写排序的方法,那么具体按照什么方法来
2020-07-20 00:00:06 155
原创 [贪心算法]LeetCode 763.划分字母区间
题面字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。链接:https://leetcode-cn.com/problems/partition-labels/题目分析这道题目…自己一开始想对了,但是又想复杂了-_-记录一下对于每一个字母而言,我们只关心最先开始出现的位置和最后出现的位置,在遍历的过程自然可以获取最先出现的位置了,所以无需记录。在拆分的过程中,我们维护一个已经遍历的字母的最后出现的位置,然
2020-07-14 21:14:25 254
原创 [贪心算法]LeetCode 376.摆动序列
题面如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除一些(也可以不删除)
2020-07-13 23:00:22 244
原创 [贪心算法][优先队列]LeetCode 1046.跳跃游戏
题面有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。链接:https://leetcode-cn.com/problems/last-stone-wei
2020-07-13 20:44:29 138
原创 [贪心算法]LeetCode 45.跳跃游戏
题面给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。链接:https://leetcode-cn.com/problems/jump-game-ii题目分析做这道题目之前相信大家已经做过跳跃游戏的基础版了。我在基础版里面的主要思路是维护一个cur表示可以到达的最大位置:cclass Solution {public: bool canJump(vector<int>&a
2020-07-12 21:52:23 287
原创 [单调栈][LeetCode 739M]每日温度详细解析
题面根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。链接:https://leetcode-cn
2020-07-05 23:52:37 222
原创 [贪心+斐波那契]算法题
题面小C是一个可爱的女孩,她特别喜欢世界上最稳定的图形:三角形。有一天她得到了n根木棍,她把这些木棍随意的摆放成一行。小K来和小C玩,他发现了这排木棍,突然想知道在一段区间[l,r]之间的木棍(即第L根到第R根木棍)是否可以组成一个三角形,小C表示她不会,所以请你帮忙。输入数据只有一组。第一行只有一个数字N,代表一共有N根木棍,N<=100000。第二行为N个数,代表每根木棍的长度。每根木棍的大小不超过1e18。第三行为一个数字Q,代表询问数目,Q<=100000。接下来的Q行,每
2020-07-03 23:26:12 444
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人