自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 二叉树的直径

二叉树的解题技巧是,首先判断问题能否划分为子问题、应当划分为什么样的子问题。二叉树直径实际上就是二叉树中的最长路径,我们是可以划分出子问题的:二叉树的最长路径=max{左子树的最长路径,右子树的最长路径,经过根结点的最长路径}其中左子树的最长路径和右子树的最长路径是两个可以递归求解的子问题,那么经过根结点的最长路径如何计算呢?是左子树的深度加上右子树的深度。代入上面的式子得到:二叉树的最长路径=max{左子树的最长路径,右子树的最长路径,左子树的深度+右子树的深度}子树的最大直径、子树的最大深度。这

2020-06-03 19:21:51 316 1

原创 腐烂的橘子

DFS(深度优先搜索)和 BFS(广度优先搜索)。它们各有不同的适应场景。题目要求:返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。实际上就是求腐烂橘子到所有新鲜橘子的最短路径。那么这道题使用 BFS,应该是毫无疑问的了这道题的主要思路是:1.一开始,我们找出所有腐烂的橘子,将它们放入队列,作为第 0 层的结点。2.然后进行 BFS 遍历,每个结点的相邻结点可能是上、下、左、右四个方向的结点,注意判断结点位于网格边界的特殊情况。3.由于可能存在无法被污染的橘子,我们需要记录新鲜橘子的数量。

2020-06-03 19:06:31 176

原创 II 和为S的连续正数序列

了解滑动窗口:滑动窗口可以看成数组中框起来的一个部分。在一些数组类题目中,我们可以用滑动窗口来观察可能的候选结果。当滑动窗口从数组的左边滑到了右边,我们就可以从所有的候选结果中找到最优的结果。对于这道题来说,数组就是正整数序列 。我们设滑动窗口的左边界为 i,右边界为j ,则滑动窗口框起来的是一个左闭右开区间 。注意,为了编程的方便,滑动窗口一般表示成一个左闭右开区间。在一开始,i=1,j=1.滑动窗口位于序列的最左侧,窗口大小为零.滑动窗口的重要性质是:窗口的左边界和右边界永远只能向右移动,而不能

2020-06-02 19:15:21 157

原创 旋转数组问题

先将整个数组反转,再将数组的前后两半(前 k 个数和后 k 个数)分别反转,就可以实现数组的旋转了。三次反转(reverse)操作的过程如下图所示:public void rotate(int[] nums, int k){ int N = nums.length; reverse(nums, 0, N); reverse(nums, 0, k); reverse(nums, k, N);};void reverse(int[] nums, int begin, in

2020-06-02 18:51:17 159

原创 链表排序

总体思想为以上三部分。下面分别讲述:1.划分:这个操作实际上可以拆分为两个基本操作:a.寻找链表的中点b.删除链表中点左侧的指针,将链表断开寻找链表中点的操作,我们在链表快慢指针的文章中讲过,使用一快一慢两个指针遍历链表即可。删除链表指针,实际上和删除链表结点类似。我们在链表遍历框架的文章中讲过,使用相邻的两个指针一同遍历链表即可。ListNode split(ListNode head){ ListNode fast = head; ListNode slow = he.

2020-06-01 19:40:10 98

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除