LeetCode疯狂练
文章平均质量分 80
郭贼不是我的菜
这个作者很懒,什么都没留下…
展开
-
每日五题-(6)
剑指Offer61.扑克牌中的顺子解析过程:1.抽到的牌中如果有重复,说明不能构成顺子。2.抽到的牌中最大的与最小的差值大于等于5,说明不能构成。(零不能算作最大或最小)3.记录最大最小值时,不需要考虑0,因为一共有两个0,所以一定会出现最大最小值的。代码实现:class Solution { //抽到的五张牌中最大的-最小的>=5 则说明不能组成(0除外) //有重复牌则不能组成 public boolean isStraight(int[] nums) {原创 2021-04-19 20:34:43 · 92 阅读 · 0 评论 -
每日五题-(5)
今天没有针对什么专门去做,就是自己剑指还没有刷完的,随便点开五道。剑指Offer 54.二叉搜索树的第k大节点解析过程:要解此题就得知道什么是二叉搜索树,其满足左孩子 <= 根 <= 右孩子。所以我们要是对其进行中序遍历的话就会有顺序的进行输出,但是此题要求解的是第k大节点,所以也就是倒数第k个,那么就需要进行二叉树的倒序输出了,[右,根,左]。使用递归去遍历的时候需要注意对其k次进行–操作,对第k个元素信息得保存起来,并返回。代码实现:class Solution {原创 2021-04-18 20:51:19 · 144 阅读 · 0 评论 -
每日五题-(4)topK专项
TopK剑指Offer40.最小的k个数,昨天想好的今天就写这道题,不过得用多种方式写出来,所以也算写了五道题,哈哈哈哈。方式一:普通快排解析过程:其实这道题一眼看下去,最直接的方法就是对整个区间进行排序,然后再去输出前k个元素就完成了。快排的时间复杂度是O(nlogn)。那么我们来回顾一下快排?整体思路就是选一个元素,将小的放在其左面,大的放在其右面,然后递归执行,直到每个区间有序,使得整个区间有序。最难的也就是这个partition过程了,具体讲解在我的博客排序算法里都有。代码实现:原创 2021-04-17 15:12:16 · 119 阅读 · 0 评论 -
每日五题(3)
剑指Offer 32-II.从上到下打印二叉树II解析过程:题目要求已经很明确了,我们需要对二叉树进行层序遍历,但这时候要注意返回值是一个嵌套链表,需要对二叉树进行按行打印,所以我们就得找个东西来存放每一行。队列就是一个比较好的选择了!当根节点不是空的时候,那就将根节点先放入队列。当我们要往list中放的时候就将其取出,然后再将该节点的子节点放入到队列中。我们可以使用for循环来控制每一层的遍历,并且用队列的长度来控制循环。当我们将二叉树遍历完成时那么队列也就一定为空了,所以这可以当做我们BFS的原创 2021-04-15 15:48:24 · 132 阅读 · 1 评论 -
每日五题(2)
剑指Offer 55-I.二叉树的深度解析过程:要判断数的深度,那么只需要知道左子树和右子树的深度哪个最大,然后再加上根结点,即为数的深度,所以此时找到递归的终止条件,也就是当root为空时,则return 0,否则继续向下查找。代码实现:class Solution { public int maxDepth(TreeNode root) { if(root == null)return 0; return Math.max(maxDepth(root原创 2021-04-14 14:20:20 · 121 阅读 · 0 评论 -
每日练题之动态规划太难了(本来想练5道题,但是实在练不动了)
LeetCode42题,连续子数组的最大和解析过程:第一步:找出最优解当要求最后一个元素4的最大连续和时,只需要判断从-2到-5的最大连续和是否为正,如果是正数,那么最后的最大值为前面的+4,否则就为其本身。也就是。第二步:状态转移方程第n项满足条件,即所有项都满足条件,所以此时我们可以列出状态转移方程。当dp[i-1] (i-1项最大之和)>= 0时,dp[i] (第i项的最大连续子数组之和)=nums[i]+dp[i-1]。反之,dp[i] = nums[i]。第三步:边界值原创 2021-04-13 22:15:13 · 278 阅读 · 0 评论