算法题记录
记录刷题时遇见的一些有趣的算法题
顿字有七
点滴尽在每天,我所学的不过是冰山一角的十分之一,但庆幸还年少。
展开
-
LeetCode-第十六个星期
求和路径LeetCode面试题 04.12,给定一个数,求一个二叉树按照顺序迭代相加后,等于该数的个数。思路分析:记录每一层的数据,然后从当前层开始向上叠加,等于的话总次数就加1,然后继续从当前层向下迭代,每一次回溯后当前层的值改变,这样就可以遍历完整个链路,得到结果。public int pathSum(TreeNode root, int sum) { //获得最大的层数 int deep = depth(root); int[] path =原创 2020-06-19 22:38:21 · 174 阅读 · 0 评论 -
LeetCode-第十五个星期
寻找重复的子树LeetCode652题,当二叉树中出现两个结构相同的节点时,将其加入结果中。思路分析:递归一个节点的子树,并且以一定的规则来得到一个key,需要保证这个规则使得这个key是唯一的,除非出现结构相同的节点,将key存入Map中,当出现的次数等于2时,将该节点插入结果集中。List<TreeNode> result; Map<Integer,...原创 2020-05-04 21:06:47 · 173 阅读 · 0 评论 -
LeetCode-第十四个星期
变为棋盘LeetCode782题,给定两种交换方式,判断一个二维数组是否能变换为指定的格式。一个 N x N的 board 仅由 0 和 1 组成 。每次移动,你能任意交换两列或是两行的位置。输出将这个矩阵变为 “棋盘” 所需的最小移动次数。“棋盘” 是指任意一格的上下左右四个方向的值均与本身不同的矩阵。如果不存在可行的变换,输出 -1。示例:输入: board = [[0,1,1,...原创 2020-04-12 18:58:44 · 158 阅读 · 0 评论 -
LeetCode-第十三个星期
DI 序列的有效排列LeetCode903题,根据给出的字符串排列数字,输出共有多少种排列方法。思路分析:原创 2020-04-06 23:18:26 · 228 阅读 · 0 评论 -
LeetCode-第十二个星期
黑板异或游戏LeetCode810题,黑板上有若干个数字,两位同学轮流擦掉一个数字轮到谁的时候,黑板上所有的数已经是0了,就是谁先获胜。思路分析:1.该题需要仔细的分析题意,当前情况分为两种。2.当前黑板上数异或以后就已经是0了,这时候小红一上来就赢了。3.当前黑板上的数异或不为0,这时候因为每个人擦的都是最优解,肯定不会让对方获胜,那么就要分为两种情况。4.当黑板上的数是奇数,那么...原创 2020-03-29 12:31:30 · 121 阅读 · 0 评论 -
LeetCode-第十一个星期
将有序数组转换为二叉搜索树LeetCode108题,给定一个增序的数组将其转化为二叉搜索树。思路分析:1.该题给出的数组是增序,我们只需将其转化为平衡的二叉搜索树即可。2.每次决定根元素都是数组中的中点,左右子树分别是中点前后的子数组。3.之后确定左右子树的根节点,也是循环步骤二。public static TreeNode sortedArrayToBST(int[] nums) ...原创 2020-03-17 20:39:24 · 84 阅读 · 0 评论 -
LeetCode-第十个星期
二叉树的右视图LeetCode199题,输出一个二叉树每一层中最右边的那个节点。思路分析:最开始肯定是从根节点的右子树开始遍历,需要考虑的问题是,当前层的右节点为空,这时候需要返回上一层接着遍历上一层的左子数,并且还需注意一层中只能输出一个节点。 static List<Integer> res = new ArrayList<>(); public s...原创 2020-03-09 13:44:39 · 121 阅读 · 0 评论 -
LeetCode-第九个星期
连续数组LeetCode525题,一个数组中找出连续的数量相等的0和1的子数组,得到子数组的最大长度。思路分析:1.该题并不是循环一次数组后,然后更新0和1相等的位置即可,有可能会发生了舍弃前面几个数可以使得0 1数量相等,所以无法保证0 1数量相等的地方。2.可以把0看做-1,然后循环数组不断叠加,将所加的值作为下标,如果同一个下标出现两次,说明这段距离的0 1数量肯定相等。3.如果...原创 2020-03-02 17:32:17 · 128 阅读 · 0 评论 -
LeetCode-第八个星期
戳印序列LeetCode936题,通过一个印章将一串文字印盖成最终所需的字符串。你想要用小写字母组成一个目标字符串 target。 开始的时候,序列由 target.length 个 '?' 记号组成。而你有一个小写字母印章 stamp。在每个回合,你可以将印章放在序列上,并将序列中的每个字母替换为印章上的相应字母。你最多可以进行 10 * target.length 个回合。举...原创 2020-02-24 22:30:42 · 112 阅读 · 0 评论 -
LeetCode-第七个星期
我的日程安排表 IILeetCode731题,如果出现了第三次区间重叠,则返回false,其余的返回true,该题需要注意细粒度和范围扩大的问题。实现一个 MyCalendar 类来存放你的日程安排。如果要添加的时间内不会导致三重预订时,则可以存储这个新的日程安排。MyCalendar 有一个 book(int start, int end)方法。它意味着在 start 到 end 时间内...原创 2020-02-19 21:11:36 · 155 阅读 · 0 评论 -
LeetCode-第六个星期
H2O生成LeetCode1117题,分别有两个线程,一个线程产生H,一个线程产生O,保证每轮输出都能产生一个水分子,顺序不做限制。现在有两种线程,氢 oxygen 和氧 hydrogen,你的目标是组织这两种线程来产生水分子。存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。氢和氧线程会被分别给予 releaseHydrogen 和 releaseO...原创 2020-02-12 21:53:31 · 95 阅读 · 0 评论 -
LeetCode-第五个星期
大礼包LeetCode638题,购买指定数量的商品,可以单独购买,也可以购买套餐,问最优惠的购买方式需要花费多少钱。在LeetCode商店中, 有许多在售的物品。然而,也有一些大礼包,每个大礼包以优惠的价格捆绑销售一组物品。现给定每个物品的价格,每个大礼包包含物品的清单,以及待购物品清单。请输出确切完成待购清单的最低花费。每个大礼包的由一个数组中的一组数据描述,最后一个数字代表大礼...原创 2020-02-03 16:07:39 · 124 阅读 · 0 评论 -
LeetCode-第四个星期
加油站LeetCode134题给定i个加油站,从A加油站行驶到B加油站会花费指定油量,但也会补充指定油量,问从那个加油站开始行驶可以走完全程。在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一...原创 2020-01-30 23:54:53 · 387 阅读 · 0 评论 -
LeetCode-第三个星期
除法求值LeetCode339题,已知一些等式,根据这些等式换算出各个字母的联系,并求出题目给出的等式值。思路分析:问题的方程式中会出现未知的方程式解,比如没有出现过的字母,这类方程式的解通常是不存在的,另外一些方程式会存在两个字母没有明显的交叉点,但是可以通过已知方程式的解,进行代换得到答案。这时我们可以把代换的过程,看作是从A点如何到B点的一个无向图求路径的问题,比如a/b=2.0,可以...原创 2020-01-23 00:02:07 · 105 阅读 · 0 评论 -
LeetCode-第二个星期
丑数LeetCode264题,寻找符合规定个数的数并返回。思路分析:可以发现丑数属于2、3、5这三个数的倍数,并且不是丑数的数即便乘以2、3、5得到的数也不是丑数,所以丑数一定是丑数乘以2、3、5得到的,那么寻找第N个丑数,只需要转化为寻找第N个丑数是2、3、5之中的那个数,乘以几得到的数返回即可。 if (n <= 6) return n; //存储丑...原创 2020-01-13 17:12:58 · 111 阅读 · 0 评论 -
LeetCode-第一个星期
前言最近一直在重温算法,该看的都看了一遍,今天开始准备刷题了每天一道,并不会把所有的题目都记录下来,会挑一些有趣的题目放在上面,欢迎一起讨论。二叉树的所有路径LeetCode第257题,难度简单,该题需要输出二叉树从根节点到叶子节点的所有路径。该题使用的是迭代的方式进行解答的,执行用时1ms,使用String进行根节点的一个叠加,这里还有一种想法:String在不断的叠加时,会耗费大量空...原创 2019-12-29 22:42:19 · 175 阅读 · 0 评论