随笔分类 - LeetCode
摘要:对于给定的正整数n,如果n的k(k >= 2) 进制数的所有数位全为1,则称k是n的一个好进制。 以字符串形式给出n,以字符串形式返回n的最小好进制。 分析:最差的情况,n的n-1进制数为11,n的二进制有$log_{2}n+1$位数,位数越多,进制越小,从$k = log_{2}n+1$位开始查找
阅读全文
摘要:快速幂,二进制取幂(Binary Exponentiation,也称平方法),是在一个$O(\lg n)$的时间内计算$a^n$的小技巧,而暴力计算需要$O(n)$的时间。 详细解释 LC50. Pow(x, n) 实现乘方函数,底数为double,指数为32-bit signed integer
阅读全文
摘要:LC116.Populating Next Right Pointers in Each Node 给一个完美二叉树的节点添加一个指向右边下一个节点的指针 方法1:(递归)二叉树前序遍历,当前遍历到的点,如果左孩子存在,左孩子的 next 指向右孩子,此外,如果当前节点 next != NULL ,
阅读全文
摘要:LC109. Convert Sorted List to Binary Search Tree 将有序链表转化成高度平衡的BST 总体思路:将中间节点作为二叉树的根节点,递归左子树和右子树 方法1:将链表值存入数组 time:$O(n)$ time:$O(n)$ class Solution {
阅读全文
摘要:LC98. Validate Binary Search Tree 给定一个二叉树,判断它是否为二叉搜索树 方法一:BST的中序遍历结果是一个严格递增的序列,因此中序遍历的时候保存上一个遍历到的节点,当前节点的值必须大于上一个节点的值 class Solution { public: bool is
阅读全文
摘要:给一串数字,在数字之间添加二元运算符 + - * ,使表达式的运算结果为 target ,输出所有可能的添加方式。 DFS:设共有 n 个数字,共有 n-1 个中间位置需要插入符号,插入的符号为: ''(0) '+'(1) '-'(2) '*'(3) 插入''(0)表示不插入数字,即相邻的数字组成更
阅读全文
摘要:如果按列从左向右放置皇后,需要用三个数组记录之前已经用过的行,主对角线,次对角线。 可以用状态压缩的方法简化问题。用三个数的二进制表示已经用过的行和两条对角线, LC52. N-Queens II 输出n皇后解的个数 class Solution { public: int cnt = 0; int
阅读全文
摘要:LC46. Permutations 给一个包含不重复元素的数组,返回所有不同的排列 分析:用dfs枚举,用一个数组 vis 记录某个元素是否已经被使用,使用的时候 vis[i] = 1 ,回溯的时候 vis[i] = 0 ,用 idx 记录当前排列要放数据的位置 class Solution {
阅读全文
摘要:LC437. Path Sum III 给一棵二叉树,和一个目标值,节点上的值有正有负,返回树中和等于目标值的路径条数,路径必须是downward的。 分析:首先明确,递归求解树的问题必然是要遍历整棵树的,所以 二叉树的遍历框架 (分别对左右孩子递归调用函数本身)必然要出现在主函数 pathSum
阅读全文
摘要:你正在安装一个广告牌,并希望它高度最大。这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。 你有一堆可以焊接在一起的钢筋 rods。举个例子,如果钢筋的长度为 1、2 和 3,则可以将它们焊接在一起形成长度为 6 的支架。 返回广告牌的最大可能安装高度。如果没法安装广告牌,请返回 0
阅读全文
摘要:https://zhuanlan.zhihu.com/p/33162490
阅读全文
摘要:BFS 所谓宽度优先,就是每次都尝试访问同一层的节点。 如果同一层都访问完了,再访问下一层。 这样做的结果是,BFS 算法找到的路径是从起点开始的 最短 合法路径。换言之,这条路所包含的边数最小。 在 BFS 结束时,每个节点都是通过从起点到该点的最短路径访问的。 实现 bfs(s) { q = n
阅读全文
摘要:回溯:当把问题分成若干步骤并递归求解时,如果当前步骤没有合法选择,则函数将返回上一级递归调用,这种现象称为回溯。 如果在回溯法中使用了辅助的全局变量,则一定要及时把它们恢复原状。特别地,若函数有多个出口,则需在每个出口处回复被修改的值。 Leetcode 51. N-Queens 给定$n$,输出$
阅读全文
摘要:问题:输出$[0,1,2,3,...n)$的所有子集。 1. 增量构造法:一次选出一个元素放到集合中。由于$A$中的元素个数不确定,每次递归调用都要输出当前集合。另外,递归边界也不需要显示确定——如果无法继续添加元素,自然就不会递归了。 2. 位向量法:构造一个位向量$B[i]$,而不是直接构造子集
阅读全文
摘要:Leetcode 46. Permutations 给定一个包含不同整数的集合,生成所有可能的排列。 Leetcode 47. Permutations II 给定一个可能包含重复整数的集合,生成所有可能的排列。 分析:值传递? Leetcode 31. Next Permutation 实现nex
阅读全文
摘要:sliding window: 解决数组/字符串的子元素问题,它可以将嵌套循环问题,转换为单循环问题,降低时间复杂度. 最简单的sliding window问题:给定一个整数数组,计算长度为 k 的连续子数组的最大总和。 总结一下Leetcode上sliding window的一些问题: Leetc
阅读全文
摘要:Leetcode 560. Subarray Sum Equals K 求一个数组中和等于k的子数组的个数 分析:prefix sum + map,当前的prefix sum为cur,之前出现过的prefix sum存到counter中(因为存在负数,可能有多个prefix sum相等,因此coun
阅读全文
摘要:Leetcode上一共出现了6道炒股问题:一个数组代表一支股票每天的价格,买了股票再卖出算一次交易,多个交易不能交叉,即只能卖了股票之后才能再买。求最大收益。 Leetcode上有一篇post介绍了一种通用的针对这类问题的解法,值得参考。 以下是我总结的每个问题比较容易理解的方法。 1.Best T
阅读全文
摘要:问题描述:在一个数列中找到一个连续的子数列,使得该子数列的和最大。 Kadane算法 扫描一次整个数列的所有值,在每个点计算以该点为结束点的子数列的最大和。该子数列由两部分组成:以前一个位置为结束点的最大子数列、该点的数值。(最优子结构,因此是动态规划问题) 这个问题很早就被Jon Bentley讨
阅读全文
摘要:https://www.zhihu.com/search?q=%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE&utm_content=search_history&type=content C++ <algorithm>的四个二分查找函数:搜索区间为[first, last
阅读全文

浙公网安备 33010602011771号