Alogrithm
文章平均质量分 54
阿飞算法
这个作者很懒,什么都没留下…
展开
-
[lougu]P2440 木材加工
题目背景要保护环境题目描述木材厂有 nn 根原木,现在想把这些木头切割成 kk 段长度均为 ll 的小段木头(木头有可能有剩余)。当然,我们希望得到的小段木头越长越好,请求出 ll 的最大值。木头长度的单位是 \text{cm}cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。例如有两根原木长度分别为 1111 和 2121,要求切割成等长的 66 段,很明显能切割出来的小段木头长度最长为 55。输入格式第一行是两个正整数 n,kn,k,分别表示原木的数量,需原创 2022-06-12 17:30:12 · 350 阅读 · 0 评论 -
向上取整向下取整探讨
先放结论:左边式子表示aaa对b+1b+1b+1向上取整,右边是取整的算法ceil(ab+1)ceil(\cfrac {a} {b+1})ceil(b+1a) = a+bb+1\cfrac {a+b} {b+1}b+1a+b上面两种情况下,都是左边=右边还有一种等价的形式:ceil(ab)ceil(\cfrac {a} {b})ceil(ba) = a+b−1b\cfrac {a+b-1} {b}ba+b−1 即⌈ab⌉⌈\cfrac {a} {b}⌉⌈ba⌉ = a+b−1b\cfrac {a原创 2022-06-07 19:23:57 · 10301 阅读 · 1 评论 -
[LeetCode]421. 数组中两个数的最大异或值
421. 数组中两个数的最大异或值原创 2022-05-31 22:04:07 · 142 阅读 · 0 评论 -
[LeetCode]1368. 使网格图至少有一条有效路径的最小代价
题目1368. 使网格图至少有一条有效路径的最小代价1368. 使网格图至少有一条有效路径的最小代价给你一个 m x n 的网格图 grid 。 grid 中每个格子都有一个数字,对应着从该格子出发下一步走的方向。 grid[i][j] 中的数字可能为以下几种情况:1 ,下一步往右走,也就是你会从 grid[i][j] 走到 grid[i][j + 1]2 ,下一步往左走,也就是你会从 grid[i][j] 走到 grid[i][j - 1]3 ,下一步往下走,也就是你会从 grid[i][j原创 2022-05-29 20:34:53 · 212 阅读 · 0 评论 -
[LeetCode]6081. 到达角落需要移除障碍物的最小数目
题目6081. 到达角落需要移除障碍物的最小数目6081. 到达角落需要移除障碍物的最小数目给你一个下标从 0 开始的二维整数数组 grid ,数组大小为 m x n 。每个单元格都是两个值之一:0 表示一个 空 单元格,1 表示一个可以移除的 障碍物 。你可以向上、下、左、右移动,从一个空单元格移动到另一个空单元格。现在你需要从左上角 (0, 0) 移动到右下角 (m - 1, n - 1) ,返回需要移除的障碍物的 最小 数目。 示例 1:输入:grid = [[0,1原创 2022-05-29 20:28:26 · 429 阅读 · 0 评论 -
[LeetCode]1293. 网格中的最短路径
题目1293. 网格中的最短路径1293. 网格中的最短路径给你一个 m * n 的网格,其中每个单元格不是 0(空)就是 1(障碍物)。每一步,您都可以在空白单元格中上、下、左、右移动。如果您 最多 可以消除 k 个障碍物,请找出从左上角 (0, 0) 到右下角 (m-1, n-1) 的最短路径,并返回通过该路径所需的步数。如果找不到这样的路径,则返回 -1 。 示例 1:输入: grid = [[0,0,0],[1,1,0],[0,0,0],[0,1,1],[0,0,0]],原创 2022-05-29 16:51:42 · 1257 阅读 · 0 评论 -
剑指 Offer II 087. 复原 IP
题目剑指 Offer II 087. 复原 IP 剑指 Offer II 087. 复原 IP 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.3原创 2022-05-29 09:38:22 · 148 阅读 · 0 评论 -
剑指 Offer II 087. 复原 IP
题目剑指 Offer II 087. 复原 IP 剑指 Offer II 087. 复原 IP 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.3原创 2022-05-31 09:31:06 · 68 阅读 · 0 评论 -
[LeetCode]468. 验证IP地址
题目468. 验证IP地址468. 验证IP地址给定一个字符串 queryIP。如果是有效的 IPv4 地址,返回 "IPv4" ;如果是有效的 IPv6 地址,返回 "IPv6" ;如果不是上述类型的 IP 地址,返回 "Neither" 。有效的IPv4地址 是 “x1.x2.x3.x4” 形式的IP地址。 其中 0 <= xi <= 255 且 xi 不能包含 前导零。例如: “192.168.1.1” 、 “192.168.1.0” 为有效IPv4地址, “192.168.01原创 2022-05-29 09:09:42 · 142 阅读 · 0 评论 -
[LeetCode]84. 柱状图中最大的矩形
题目84. 柱状图中最大的矩形84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1:输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10示例 2:输入: heights = [2,4]输出: 4 提示:1 <= heights.length <=1050 <= hei原创 2022-05-28 21:47:19 · 143 阅读 · 0 评论 -
[LeetCode]1856. 子数组最小乘积的最大值
题目1856. 子数组最小乘积的最大值1856. 子数组最小乘积的最大值一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) = 2 * 10 = 20 。给你一个正整数数组 nums ,请你返回 nums 任意 非空子数组 的最小乘积 的 最大值 。由于答案可能很大,请你返回答案对 109 + 7 取余 的结果。请注意,最小乘积的最大值考虑的是取余操作 之前 的结果。题目保证最小乘积的最大值原创 2022-05-28 19:45:32 · 240 阅读 · 0 评论 -
[LeetCode]739. 每日温度
题目739. 每日温度739. 每日温度给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出: [1,1原创 2022-05-28 18:11:11 · 217 阅读 · 0 评论 -
[LeetCode]856. 括号的分数
题目856. 括号的分数856. 括号的分数给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。 示例 1:输入: "()"输出: 1示例 2:输入: "(())"输出: 2示例 3:输入: "()()"输出: 2示例 4:输入: "(()(()))"输出: 6 提示:S 是平衡括号字符串,且只含有 ( 和原创 2022-05-28 11:17:25 · 255 阅读 · 0 评论 -
数据结构设计之线段树[White Rhinoceros]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-690ChcrN-1652613175233)(https://pic.leetcode-cn.com/1598177709-RslKQm-timg%20(2)].jpg)方法0:种子上图中right修改成 right=2*node+2下面为在做queryTreequeryTreequeryTree时做加速 if (start >= L && end <= R) return tree[原创 2022-05-15 19:15:44 · 142 阅读 · 0 评论 -
一文掌握树状数组
定义树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为Fenwick树,最早由Peter M. Fenwick于1994年以A New Data Structure for Cumulative Frequency Tables为题发表在SOFTWARE PRACTICE AND EXPERIENCE。其初衷是解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和, 区间和。原码,反码,补码的产生过程,就..原创 2022-05-15 19:10:09 · 139 阅读 · 0 评论 -
树的直径合辑
543. 二叉树的直径int res = 1;public int diameterOfBinaryTree(TreeNode root) { dfs(root); return res - 1;}public int dfs(TreeNode root) { if (root == null) return 0;//如果达到叶子节点的子节点,返回0 int leftDepth = dfs(root.left);//遍历左子树 int rightDepth原创 2022-04-17 21:32:44 · 660 阅读 · 0 评论 -
【重温经典】接雨水 I
【重温经典】接雨水 I方法1:单调栈 public int trap(int[] height) { int res = 0; Stack<Integer> stk = new Stack<>();//存数组的下标索引 int cur = 0; //当前位置的下标 while (cur < height.length) {原创 2021-11-26 19:01:40 · 289 阅读 · 0 评论 -
背包问题之掷骰子的N种方法
背包问题之掷骰子的N种方法方法1:朴素DP分组背包的一道题,也有点类似求硬币组合数量那道题定义dp[i][j]dp[i][j]dp[i][j]为在持有iii个骰子的情况下,能组成jjj的点数的组合数iii的上限是ddd即ddd个骰子,jjj的上限是targettargettarget即目标的点数,初始化时new int[d+1][target+1],让下标从1开始从边界条件考虑到一般条件,dp[0][0]dp[0][0]dp[0][0]表示当前有0个骰子能掷出0的点数的方案.原创 2021-11-18 18:52:18 · 537 阅读 · 0 评论 -
【重温经典】Pow(x, n)
【重温经典】Pow(x, n)二进制可以转化成十进制,假设十进制正整数n,其二进制的表示方式是:「bm...bi...b2b1b0b_m...b_i...b_2b_1b_0bm...bi...b2b1b0」则 n=20b0+21b1+22b2+...+2ibi+...2mbmn=2^0b_0+2^1b_1+2^2b_2+...+2^ib_i+...2^mb_mn=20b0+21b1+22b2+...+2ibi+...2mbm则xn=x(20b0+21b1+22b2+...原创 2021-11-11 08:48:15 · 417 阅读 · 0 评论 -
Create a customized data structure which evaluates functions in O(1)(创建自定义的在O(1)复杂度评估函数的数据结构)
Create a customized data structure which evaluates functions in O(1)(创建自定义的在O(1)复杂度评估函数的数据结构)创建有如下函数的数据结构(复杂度都是O(1)):GetLastElement()RemoveLastElement()AddElement()GetMin()Code: static class _1st_3 { public static void main(String[] arg原创 2021-11-03 19:54:03 · 81 阅读 · 0 评论 -
Design a stack with operations on middle element(设计一个操作中间元素的栈)
Design a stack with operations on middle element(设计一个操作中间元素的栈)如何在O(1)的时间复杂度下实现支持以下操作的栈?1).push():将元素添加到栈顶部。2).pop():从栈顶部移除元素。3).findmidle():返回栈的中间元素。4).deleteMiddle():将删除中间元素。推栈和弹栈是标准的栈操作。重要的问题是,是否使用链表或数组来实现栈?请注意,需要查找并删除中间元素。对于数组而言,从中间删原创 2021-11-03 09:19:46 · 131 阅读 · 0 评论 -
是真的懂LCA吗?
是真的懂LCA吗?最近公共祖先(LCA|Lowest Common Ancestor)一棵有根的树T。两个节点n1和n2之间的最低共同祖先被定义为T中具有n1和n2作为后代的最低节点(允许一个节点是其自身的后代)。T中n1和n2的LCA是距离根最远的n1和n2的共同祖先。例如,作为确定树中节点对之间距离的过程的一部分,计算最低共同祖先可能是有用的:从n1到n2的距离可以计算为从根到n1的距离,加上从根到n2的距离,减去从根到其最低共同祖先的距离的两倍。方法1:DFS思路:1.leftlef原创 2021-10-28 09:41:15 · 165 阅读 · 0 评论 -
Lowest Common Ancestor in a Binary Tree | Set 2 (Using Parent Pointer)(二叉树的最近公共祖先节点(使用父节点))
Lowest Common Ancestor in a Binary Tree | Set 2 (Using Parent Pointer)(二叉搜索树的最近公共祖先节点(使用父节点))[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPzyhG7k-1635208191223)(/Users/frankcooper/Library/Application Support/typora-user-images/image-20211025194214158.png)]Inp原创 2021-10-26 08:30:00 · 128 阅读 · 0 评论 -
Lowest Common Ancestor in a Binary Search Tree(二叉搜索树的最近公共祖先节点)
Lowest Common Ancestor in a Binary Search Tree(二叉搜索树的最近公共祖先节点)Input: LCA of 10 and 14Output: 12Explanation: 12 is the closest node to both 10 and 14 which is a ancestor of both the nodes.Input: LCA of 8 and 14Output: 8Explanation: 8 is the close原创 2021-10-25 20:18:31 · 263 阅读 · 0 评论 -
Merge Two Balanced Binary Search Trees(合并两棵平衡二叉搜索树)
Merge Two Balanced Binary Search Trees(合并两棵平衡二叉搜索树)Q:有两棵二叉树,如AVL或红黑树。编写一个函数,将两个给定的平衡BST合并到一个平衡的二叉树中。第一棵树中有m个元素,另一棵树中有n个元素。合并函数为O(m+n)时间复杂度。在以下解决方案中,假设树的大小也作为输入。如果没有给出大小,那么我们可以通过遍历树来获得大小。Solution:方法1(将第一棵树的元素插入第二棵树)逐个获取第一个BST的所有元素,并将它们插入第二个BST。将元素插入自平原创 2021-10-25 19:38:05 · 1246 阅读 · 0 评论 -
Two nodes of a BST are swapped, correct the BST(恢复两个节点被交换的BST)
Two nodes of a BST are swapped, correct the BST(恢复两个节点被交换的BST)Q:BST的两个节点被交换了,修复它:Input Tree: 10 / \ 5 8 / \ 2 20In the above tree, nodes 20 and 8 must be swapped to fix the tree. Following is the output tree原创 2021-10-23 09:51:42 · 146 阅读 · 0 评论 -
A program to check if a binary tree is BST or not(判断一棵树是否是BST)
A program to check if a binary tree is BST or not(判断一棵树是否是BST)Q:二叉搜索树(BST)是一种基于节点的二叉树数据结构,具有以下特性:节点的左子树仅包含小于节点键值的节点。节点的右子树仅包含大于节点键值的节点。左子树和右子树也必须是BST树。根据上述特性,自然得出以下结论:每个节点(树上的节点)都有一个不同的键值。方法1(错误的):下面是一个简单的程序。对于每个节点,检查其左侧节点是否小于该节点,右侧节点是原创 2021-10-23 06:33:33 · 270 阅读 · 0 评论 -
Connect nodes at same level(连接同一层的节点)
Connect nodes at same level(连接同一层的节点)Q:Input Tree A / \ B C / \ \ D E FOutput Tree A--->NULL / \ B-->C-->NULL / \ \ D-->E-->F-->NULL方法1(拓展层序遍历或BFS)参考层序遍历,可以很容易地扩展到连接相同层的节原创 2021-10-21 22:04:29 · 125 阅读 · 0 评论 -
Check if a binary tree is subtree of another binary tree | Set 1(判断一棵二叉树是否是另外一棵二叉树的子树)
Check if a binary tree is subtree of another binary tree | Set 1(判断一棵二叉树是否是另外一棵二叉树的子树)Q:给定两棵二叉树,检查第一棵树是否是第二棵树的子树。树T的子树是一棵树S满足下面的条件:由T中的一个节点和T中的所有子节点组成。与根节点对应的子树是整棵树;与任何其他节点对应的子树称为符合条件的子树。例如,在以下情况下,树S(Tree2)是树T(Tree1)的子树。 Tree 2 10原创 2021-10-21 21:34:26 · 99 阅读 · 0 评论 -
Maximum Depth or Height of a Tree(二叉树的最大高度)
Maximum Depth or Height of a Tree思路 maxDepth()1. If tree is empty then return 02. Else (a) Get the max depth of left subtree recursively i.e., call maxDepth( tree->left-subtree) (a) Get the max depth of right subtree recursive原创 2021-09-27 16:36:57 · 191 阅读 · 0 评论