![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题笔记
哪一个Jan?
这个作者很懒,什么都没留下…
展开
-
重建二叉树
总结重建二叉树的递归和迭代做法 来源 剑指Offer 面试题7:重建二叉树原创 2020-12-01 12:33:23 · 94 阅读 · 0 评论 -
topk II
按算法导论写法,一个注意点:虽然随机化版本的快速排序的(数学)期望运行时间是O(n lgn),但在实际使用时要注意到,random函数本身开销也不小 题目 以剑指offer 40 最小的k个数为例 输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 示例 1: 输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1] 示例 2: 输入:arr = [0,1,2,1], k = 1 输出原创 2020-11-10 12:48:52 · 95 阅读 · 0 评论 -
topK问题记录
以leetcode973问为例 题目描述 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 (这里,平面上两点之间的距离是欧几里德距离。) 你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。 示例 1: 输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt原创 2020-11-09 19:04:36 · 130 阅读 · 0 评论 -
结构相似的二叉树前中后序遍历
之前总结过基于迭代的前中后序遍历方法,但三种方法对应的代码结构很不同,今天做每日一题的时候看到了有人总结的三种结构相似的二叉树前中后序遍历方法,特此记录。 1 前序遍历 public List preorder(TreeNode root){ Stack stack = new Stack(); List list = new LinkedList(); while(!stack.isEmpty() || root!=null){ if(root!=null){原创 2020-09-29 10:48:23 · 197 阅读 · 0 评论 -
二叉树的遍历方法总结
问题描述 给定一个二叉树,返回它的中序遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 解法 1 递归法 class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); helpe原创 2020-09-16 17:02:43 · 77 阅读 · 0 评论 -
Leetcode108 将有序数组转换为二叉搜索树
题目描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 解法 解法1 递归法 官方解法 解法2 利用队列迭代 /** * Definition for a原创 2020-09-14 10:58:00 · 61 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
题目描述 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 解法 解法1 用栈实现的DFS 在leetcode的题解栏目里没有找到非递归的DFS算法,百度了一下也只找到了js写的非递归法,为了以后自己复习方便,特此记录 /** * Definition原创 2020-09-10 09:36:00 · 73 阅读 · 0 评论 -
Leetcode62 不同路径
题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 解法 动态规划 思路:首先,根据输入建立二维数组memo,依据题意初始化第一行和第一列的元素值为1,用双重循环遍历剩下的格子,剩下的某个格子i的值 = i 左边格子的值 + i 上方格子的值 class Solution { public int uniquePaths(i原创 2020-08-18 23:16:45 · 52 阅读 · 0 评论 -
Leetcode56 合并区间:双指针
题目描述 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: intervals = [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: intervals = [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。 解法一 思路:首先将输入二维数组进行排序,然后逐一判断是否和上一个原创 2020-08-17 14:34:07 · 119 阅读 · 0 评论 -
Leetcode55 跳跃游戏 动态规划和贪心算法
题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。 解法1 1.原创 2020-08-17 11:27:30 · 171 阅读 · 0 评论 -
Leetcode 53 最大子序和 在线处理/动态规划
Leetcode 53 最大子序和 使用 在线处理法/动态规划法, 看到有两个解法都是这个思想,但在细节上有所不同,都是正确的解法,在此做个记录。 题目描述 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 解法1代码 class Solution { public int maxSubArray(int[]原创 2020-08-14 11:57:07 · 161 阅读 · 0 评论