分治
分治
Sophia_fez
干啥啥不行,可爱第一名.jpg
展开
-
leetcode *剑指 Offer 07. 重建二叉树 & *105. 从前序与中序遍历序列构造二叉树(2020.5.22) & *106. 从中序与后序遍历序列构造二叉树(2020.9.25)
【题目】*105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 【解题思路1】递归 对于任意一颗树而言,前序遍历: [ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ] 中序遍历: [原创 2020-05-22 11:20:08 · 251 阅读 · 0 评论 -
leetcode *剑指 Offer 33. 二叉搜索树的后序遍历序列(二叉搜索树后序遍历特性)
【题目】*剑指 Offer 33. 二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3 示例 1: 输入: [1,6,3,2,5] 输出: false 示例 2: 输入: [1,3,2,6,5] 输出: true 提示: 数组长度 <= 1000 【解题思路1】递归 终止条件原创 2020-09-22 22:20:02 · 173 阅读 · 0 评论 -
leetcode **剑指 Offer 51. 数组中的逆序对(分治 - 归并排序)(2020.4.24)
【题目】**面试题51. 数组中的逆序对 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制: 0 <= 数组长度 <= 50000 【解题思路1】分治 - 归并排序 两个子区间分别有序,先计算两个子区间内部的逆序对个数,然后计算在合并的过程中跨越两个区...原创 2020-04-24 16:18:28 · 256 阅读 · 0 评论 -
leetcode *剑指 Offer 16. 数值的整数次方 & *50. Pow(x, n)(2020.5.11)
【题目】*50. Pow(x, n) 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 示例 1: 输入: 2.00000, 10 输出: 1024.00000 示例 2: 输入: 2.10000, 3 输出: 9.26100 示例 3: 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25 说明: -100.0 < x < 100.0 n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。 【解题思原创 2020-05-11 14:51:36 · 203 阅读 · 0 评论 -
leetcode 面试题 08.03. 魔术索引(2020.7.31)
【题目】面试题 08.03. 魔术索引 魔术索引。 在数组A[0…n-1]中,有所谓的魔术索引,满足条件A[i] = i。给定一个有序整数数组,编写一种方法找出魔术索引,若有的话,在数组A中找出一个魔术索引,如果没有,则返回-1。若有多个魔术索引,返回索引值最小的一个。 示例1: 输入:nums = [0, 2, 3, 4, 5] 输出:0 说明: 0下标的元素为0 示例2: 输入:nums = [1, 1, 1] 输出:1 提示: nums长度在[1, 1000000]之间 【解题思路1】原创 2020-06-03 14:13:46 · 246 阅读 · 0 评论 -
leetcode **312. 戳气球(2020.7.19)
【题目】**312. 戳气球 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。 求所能获得硬币的最大数量。 说明: 你可以假设 nums[-1] = nums[n] =原创 2020-07-19 10:23:56 · 191 阅读 · 0 评论 -
leetcode **315. 计算右侧小于当前元素的个数(逆序数对数)(待深究)(2020.7.11)
【题目】**315. 计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例: 输入: [5,2,6,1] 输出: [2,1,1,0] 解释: 5 的右侧有 2 个更小的元素 (2 和 1). 2 的右侧仅有 1 个更小的元素 (1). 6 的右侧有 1 个更小的元素 (1). 1 的右侧有 0 个更小的元素. 【解题思路1】冒泡排序/暴力算法原创 2020-07-11 10:07:20 · 207 阅读 · 0 评论 -
leetcode 剑指 Offer 39. 数组中出现次数超过一半的数字 & 169. 多数元素(2020.3.13) & 面试题 17.10. 主要元素(2021.7.9)(投票算法)
【题目】 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [3,2,3] 输出: 3 示例 2: 输入: [2,2,1,1,1,2,2] 输出: 2 官方题解 【解题思路1】排序 出现次数最多的元素大于n/2次的就是众数,暴力法会超时,所以可以先排序,然后下...原创 2020-03-13 22:46:28 · 319 阅读 · 0 评论 -
leetcode 面试题 08.06. 汉诺塔问题(分治+递归)(待复习)
【题目】面试题 08.06. 汉诺塔问题 在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: (1) 每次只能移动一个盘子; (2) 盘子只能从柱子顶端滑出移到下一根柱子; (3) 盘子只能叠在比它大的盘子上。 请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。 你需要原地修改栈。 示例1: 输入:A = [2, 1, 0], B = [], C原创 2020-06-03 14:23:22 · 317 阅读 · 0 评论