07 2020 档案

摘要:这个层序遍历要求返回每层的节点,正常的BFS从队列中弹出一个节点后就判断其有没有左子树和右子树,所以直接用BFS实现的话无法分层输出。 需要记录每层的节点数目,增加一个for循环就可以了。 /** * Definition for a binary tree node. * public class 阅读全文
posted @ 2020-07-25 11:58 菜鸡A 阅读(170) 评论(0) 推荐(0)
摘要:可以想到,数组中会出现“断层”,直接遍历一次即可。不存在【1,2,3,4,5】旋转成【5,4,3,2,1】的情况。 暴力法(我感觉还行啊,为什么被叫暴力): class Solution { public int minArray(int[] numbers) { int n = numbers.l 阅读全文
posted @ 2020-07-22 10:13 菜鸡A 阅读(108) 评论(0) 推荐(0)
摘要:1.层序遍历,一个队列存放节点,一个队列存放到当前节点的值。 2.递归 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * 阅读全文
posted @ 2020-07-07 14:07 菜鸡A 阅读(123) 评论(0) 推荐(0)
摘要:第一次在力扣上做树的题,理论明白了,递归还是有点难理解。 注释的代码是树的结构,题中默认的。 首先,二叉排序树的中序遍历是有序的,题中也是有序数组,这就巧了。如果以最中间的那个数为根节点,比它小的数在左子树,比它大的数在右子树。然后其左边又应该是一棵平衡二叉树,右边也是。至于为什么,有待研究。 /* 阅读全文
posted @ 2020-07-03 17:20 菜鸡A 阅读(132) 评论(0) 推荐(0)
摘要:容易想到的暴力解法:把数据都取出来排序,需要n2大小的数组存储 既然数组是有序的,把每一行看成一个有序数组,对这些数组进行归并排序,归并到第k个数为止。 看了题解,了解到优先级队列PriorityQueue可以用于实现归并排序,PriorityQueue底层是一个堆的结构。具体可参考这篇文章 刷算法 阅读全文
posted @ 2020-07-02 11:59 菜鸡A 阅读(149) 评论(0) 推荐(0)