算法
文章平均质量分 73
迷路剑客
弱小和无知不是生存的障碍,傲慢才是。
展开
-
算法-并查集/堆/Dijkstra迪杰斯特拉-水位上升的泳池中游泳
算法-并查集/堆/Dijkstra迪杰斯特拉-水位上升的泳池中游泳1 题目概述1.1 题目出处https://leetcode-cn.com/problems/swim-in-rising-water/1.2 题目描述2 并查集2.1 思路注意,平台数字是连续的,且从0到nn-1。则可利用这一特点,从高度1的节点开始,不断和周边比他高度小的节点进行并查集合并。每次遍历后,判断0和nn-1所属并查集是否为同一个祖先,如果是代表已经符合要求,返回遍历的轮数即可(轮数从1开始)。2.2 代码c原创 2021-01-31 22:04:03 · 386 阅读 · 0 评论 -
算法-回溯法-有重复字符串的排列组合
算法-回溯法-有重复字符串的排列组合1 题目概述1.1 题目出处https://leetcode-cn.com/problems/permutation-ii-lcci/1.2 题目描述2.1 回溯法2.1 解题思路使用回溯法,每次从首字符开始往后遍历最后所有字符,并用一个boolean数组记录这一趟DFS已经使用过的字符位置,如果已经用过就不再使用,否则添加到StringBuilder末尾。当StringBuilder长度等于原始字符串长度时,达到结束条件,加入结果集,结果集用HashS原创 2021-01-30 14:10:44 · 1004 阅读 · 0 评论 -
算法-回溯法-无重复字符串的排列组合
算法-回溯法-无重复字符串的排列组合1 题目概述1.1 题目出处https://leetcode-cn.com/problems/permutation-i-lcci1.2 题目描述2.1 回溯法2.1 解题思路使用回溯法,每次从首字符开始往后遍历最后所有字符,并用一个boolean数组记录这一趟DFS已经使用过的字符位置,如果已经用过就不再使用,否则添加到StringBuilder末尾。当StringBuilder长度等于原始字符串长度时,达到结束条件,加入结果集。2.2 代码cla原创 2021-01-30 13:20:44 · 439 阅读 · 0 评论 -
算法-递归-对称二叉树
算法-递归-对称二叉树1 题目概述1.1 题目出处https://leetcode-cn.com/problems/symmetric-tree/1.2 题目描述2.1 双指针+递归2.1 解题思路根据对称树的特点,我们用两个指针分别往左子节点和右子节点递归查询每次查询时比较他们是否都为空,如果都不为空就比较是否值相等如果值相等,就继续检查左节点的左节点和右节点的右节点、左节点的右节点和右节点的左节点只要都相同就说明对称,否则不对称2.2 代码/** * Definitio原创 2021-01-13 12:16:00 · 210 阅读 · 0 评论 -
算法-堆/排序-最后一块石头的重量
算法-堆/排序-最后一块石头的重量1 题目概述1.1 题目出处https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/1.2 题目描述2.1 排序法2.1 解题思路先将数组排序然后每次取最后两个数字,此时将最后一个数字更新为last - last2,倒数第二个数字设为0随后重新排序,排序后0排到了最前面,而最大和次大的石头又到了数组最后两位循环2和3的过程,直到倒数第二个数字为0,即已经合并完毕原创 2020-12-30 11:47:36 · 190 阅读 · 0 评论 -
算法-单调递增的数字
算法-单调递增的数字1 题目概述1.1 题目出处https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/1.2 题目描述2 从最往右2.1 思路从左往右比:如果发现当前数比前一个数小,则不符合题意,此时将前一位的数字减1,当前位及以后的所有位数字变为9,然后传入新的数字递归调用该解法求解如果当前数大于等于前一个数,则符合题意,继续探寻下一个数2.2 代码class Solution {原创 2020-12-15 11:38:54 · 397 阅读 · 0 评论 -
算法-分割数组为连续子序列
算法-分割数组为连续子序列1 题目概述1.1 题目出处https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/1.2 题目描述2 贪心法2.1 思路先统计每个数出现次数,然后从小到大开始组合:总是贪心地和比自己小1的数结尾的长度为1的子集组合,成为以当前数结尾的长度为2的子集剩下的数和比自己小1的数结尾的长度为2的子集组合,成为以当前数结尾的长度为3的子集最后剩下的数,和比自己小1的数结尾的原创 2020-12-04 15:04:59 · 428 阅读 · 0 评论 -
算法-计数质数
算法-计数质数1 题目概述1.1 题目出处https://leetcode-cn.com/problems/count-primes/1.2 题目描述2 暴力枚举2.1 思路根据质数性质:只能被1和他本身这两个数整除的数称为质数。2.2 代码class Solution { public int countPrimes(int n) { int result = 0; if(n < 2){ return result;原创 2020-12-03 11:52:53 · 187 阅读 · 0 评论 -
算法-数组-独一无二的出现次数
算法-数组-独一无二的出现次数1 题目概述1.1 题目出处https://leetcode-cn.com/problems/unique-number-of-occurrences/1.2 题目描述2 数组2.1 思路用数组分别记录每个独立数字对应出现次数独立的数字有哪些独立数字对应出现次数是否唯一虽然比较绕,但数组是最快的,比什么HashMap都快得多,因为没有其他开销,直接拿下标O(1)就能取出数字,没有冲突。2.2 代码class Solution { publ原创 2020-10-28 11:03:18 · 251 阅读 · 0 评论 -
算法-回溯-解数独
算法-回溯-解数独1 题目概述1.1 题目出处https://leetcode-cn.com/problems/sudoku-solver/1.2 题目描述上图中答案被标成红色。Note:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。2 低效的回溯法2.1 思路这段转自组合总和-解题思路回溯法的解体框架是什么呢,解决一个回溯问题,实际上就是一个决策树的遍历过程。一般来说,我们需要解决三个问题:路径:也就原创 2020-09-15 15:42:26 · 432 阅读 · 0 评论 -
算法-KMP-重复的子字符串
算法-KMP-重复的子字符串1 题目概述1.1 题目出处https://leetcode-cn.com/problems/repeated-substring-pattern/solution/java-yi-xing-dai-ma-jie-jue-zhong-fu-zi-chuan-wen-/1.2 题目描述2 暴力枚举法2.1 思路从长度为1的窗口开始翻滚,每次用substring方法比较,如果不同,就停止,并将窗口大小加一再次比较。2.2 代码class Solution {原创 2020-08-24 14:51:58 · 522 阅读 · 0 评论 -
算法-图-克隆图
算法-图-克隆图1 题目概述1.1 题目出处https://leetcode-cn.com/problems/clone-graph/1.2 题目描述给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node {public int val;public List neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(va原创 2020-08-12 12:28:39 · 239 阅读 · 0 评论 -
算法-动态规划-打家劫舍3
算法-动态规划-打家劫舍31 题目概述1.1 题目出处https://leetcode-cn.com/problems/house-robber-iii1.2 题目描述2 动态规划2.1 思路见代码注释。2.2 代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * T原创 2020-08-05 11:36:24 · 280 阅读 · 0 评论 -
算法-BST-不同的二叉搜索树 II
算法-BST-不同的二叉搜索树 II1 题目概述1.1 题目出处https://leetcode-cn.com/problems/unique-binary-search-trees-ii/1.2 题目描述2 递归2.1 思想每次遍历 start->end,依次取来作为root,然后分别找两边的所有可能子树组成的子树list,并将左子树list和右子树list双重遍历组合所有可能来分别作为root的left和right,放入resultList。2.2 代码/** * Defin原创 2020-07-21 11:55:54 · 163 阅读 · 0 评论 -
算法-图染色法 DFS/BFS-判断二分图
算法-图染色法 DFS/BFS-判断二分图1 题目概述1.1 题目出处https://leetcode-cn.com/problems/is-graph-bipartite/1.2 题目描述2 图-DFS2.1 思路遍历所有节点进行染色,比如初始为白色,然后对直接相连的节点bfs染色为黑色。然后对这些染为黑色的相邻节点也染色为白色,以此类推继续bfs染色。如果要染色某节点时,要染的目标颜色和该节点的已经染过的颜色不同,则说明不能构成二分图。2.2 代码class Solution {原创 2020-07-16 15:02:45 · 2743 阅读 · 0 评论 -
算法-贪心/动态规划-买卖股票的最佳时机
1 买卖股票的最佳时机 V11.1 概述1.1.1 题目出处https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/1.1.2 题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格原创 2020-07-10 13:04:23 · 9040 阅读 · 0 评论 -
算法-动态规划/滑动窗口-最长重复子数组
算法-动态规划/滑动窗口-最长重复子数组1 概述1.1 题目出处https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/1.2 题目描述给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例 1:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出: 3解释:长度最长的公共子数组是 [3, 2, 1]。说明:1 <= len(A), len(B) <原创 2020-07-02 23:32:37 · 373 阅读 · 0 评论 -
算法-二叉树DFS-从先序遍历还原二叉树
算法-二叉树DFS-从先序遍历还原二叉树1 搜索插入位置1.1 题目出处https://leetcode-cn.com/problems/recover-a-tree-from-preorder-traversal/1.2 题目描述我们从二叉树的根节点 root 开始进行深度优先搜索。在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是该节点的深度),然后输出该节点的值。(如果节点的深度为 D,则其直接子节点的深度为 D + 1。根节点的深度为 0)。如果节点只有一个子节点,那么保证该子原创 2020-06-18 22:14:09 · 506 阅读 · 0 评论 -
算法-二叉树-序列化与反序列化
算法-二叉树-序列化与反序列化1 搜索插入位置1.1 题目出处https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree1.2 题目描述序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个原创 2020-06-16 10:30:30 · 190 阅读 · 0 评论 -
算法-Trie树/- 最长公共前缀
算法-Trie树/- 最长公共前缀1 题目概述1.1 题目出处https://leetcode-cn.com/problems/longest-common-prefix/1.2 题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包原创 2020-06-15 10:46:35 · 801 阅读 · 0 评论 -
算法-二分查找-转变数组后最接近目标值的数组和
算法-二分查找-转变数组后最接近目标值的数组和1 题目概述1.1 题目出处https://leetcode-cn.com/problems/sum-of-mutated-array-closest-to-target/1.2 题目描述给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你原创 2020-06-14 12:25:27 · 530 阅读 · 0 评论 -
算法-回溯法/双指针-三数之和
算法-回溯法/双指针-三数之和1 题目概述1.1 题目出处https://leetcode-cn.com/problems/3sum1.2 题目描述给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1,原创 2020-06-12 12:30:23 · 612 阅读 · 0 评论 -
算法-栈-每日温度
算法-栈-每日温度1 题目概述1.1 题目出处https://leetcode-cn.com/problems/daily-temperatures/1.2 题目描述根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示原创 2020-06-11 10:44:47 · 242 阅读 · 0 评论 -
算法-回溯法-回文
算法-回溯法-回文1 题目概述1.1 题目出处https://leetcode-cn.com/problems/palindrome-number/submissions/1.2 题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出:原创 2020-06-10 11:10:05 · 429 阅读 · 0 评论 -
算法-回溯法/动态规划-把数字翻译成字符串
算法-回溯法-把数字翻译成字符串1 题目概述1.1 题目出处https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/1.2 题目描述给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释原创 2020-06-09 11:28:17 · 232 阅读 · 0 评论 -
算法-并查集/BFS/DFS-等式方程的可满足性
算法-并查集-等式方程的可满足性1 题目概述1.1 题目出处https://leetcode-cn.com/problems/satisfiability-of-equality-equations/1.2 题目描述给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:“a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才原创 2020-06-08 12:12:55 · 205 阅读 · 0 评论 -
算法-面试-最长连续序列
算法-面试-最长连续序列1 题目概述1.1 题目出处https://leetcode-cn.com/problems/longest-consecutive-sequence/1.2 题目描述给定一个未排序的整数数组,找出最长连续(等差为1)序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。2 并查集2.1 思路遍历每个数字,如果小1或大1的数字存在,就原创 2020-06-07 13:11:16 · 199 阅读 · 0 评论 -
算法-面试-顺时针打印矩阵
算法-面试-顺时针打印矩阵1 题目概述1.1 题目出处https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/1.2 题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12原创 2020-06-06 10:40:26 · 222 阅读 · 0 评论 -
算法-除自身以外数组的乘积
算法-除自身以外数组的乘积1 题目概述1.1 题目出处https://leetcode-cn.com/problems/product-of-array-except-self/1.2 题目描述给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(原创 2020-06-04 11:20:07 · 289 阅读 · 0 评论 -
算法-动态规划-新21点
算法-动态规划-新21点1 题目概述1.1 题目出处https://leetcode-cn.com/problems/new-21-game/1.2 题目描述爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下:爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次抽取都是独立的,其结果具有相同的概率。当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是原创 2020-06-03 12:02:26 · 581 阅读 · 0 评论 -
算法-逻辑符短路-求1+2+…+n
算法-逻辑符短路-求1+2+…+n1 题目概述1.1 题目出处https://leetcode-cn.com/problems/qiu-12n-lcof/1.2 题目描述求 1+2+…+n 。注意:要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 100002 递归-逻辑符短路2.1 思路等差数原创 2020-06-02 22:03:04 · 186 阅读 · 0 评论 -
算法-线段树-区域和检索 - 数组可修改
算法-区域和检索 - 数组可修改1 题目概述1.1 题目出处https://leetcode-cn.com/problems/range-sum-query-mutable/1.2 题目描述给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。示例:Given nums = [1, 3, 5]sumRange(0, 2) ->原创 2020-06-01 15:23:34 · 156 阅读 · 0 评论 -
算法-并查集/DFS/BFS-朋友圈
算法-并查集/DFS/BFS-朋友圈1 题目概述1.1 题目出处https://leetcode-cn.com/problems/friend-circles/1.2 题目描述班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互原创 2020-05-31 23:50:00 · 651 阅读 · 0 评论 -
算法-数据结构-实现 Trie (前缀树)
算法-数据结构-实现 Trie (前缀树)1 题目概述1.1 题目出处https://leetcode-cn.com/problems/implement-trie-prefix-tree/1.2 题目描述实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert(“apple”);trie.search(“apple”); // 返回 truetrie.sea原创 2020-05-29 15:40:58 · 216 阅读 · 0 评论 -
算法-动态规划-地下城游戏
算法-动态规划-地下城游戏1 题目概述1.1 题目出处https://leetcode-cn.com/problems/dungeon-game/1.2 题目描述一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数原创 2020-05-28 00:12:27 · 602 阅读 · 0 评论 -
算法-动态规划-最小路径和
算法-动态规划-最小路径和1 题目概述1.1 题目出处https://leetcode-cn.com/problems/minimum-path-sum/1.2 题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的原创 2020-05-27 17:27:29 · 354 阅读 · 0 评论 -
算法-动态规划-最长上升子序列
算法-动态规划-最长上升子序列1 题目概述1.1 题目出处https://leetcode-cn.com/problems/longest-increasing-subsequence/1.2 题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(原创 2020-05-27 15:35:36 · 198 阅读 · 0 评论 -
算法-动态规划-三角形最小路径和
算法-动态规划-三角形最小路径和1 题目概述1.1 题目出处https://leetcode-cn.com/problems/triangle/1.2 题目描述给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 =原创 2020-05-26 14:22:58 · 306 阅读 · 0 评论 -
算法-回溯法/动态规划-零钱兑换
算法-动态规划-零钱兑换1 题目概述1.1 题目出处https://leetcode-cn.com/problems/coin-change/1.2 题目描述给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2],原创 2020-05-26 00:09:18 · 1853 阅读 · 0 评论 -
算法-动态规划-最大子序和
算法-动态规划-最大子序和1 题目概述1.1 题目出处https://leetcode-cn.com/problems/maximum-subarray/1.2 题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。2 暴原创 2020-05-25 16:38:08 · 174 阅读 · 0 评论