![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法刷题
文章平均质量分 50
靠谱的大钊
没啥写, 就这样
展开
-
二叉树路径问题: 合集--所有路径-路径总和-路径总和 II-路径总和 III-最大路径和
文章目录[257. 二叉树的所有路径](https://leetcode-cn.com/problems/binary-tree-paths/)[112. 路径总和](https://leetcode-cn.com/problems/path-sum/)递归非递归[113. 路径总和 II](https://leetcode-cn.com/problems/path-sum-ii/)[437. 路径总和 III](https://leetcode-cn.com/problems/path-sum-iii/)原创 2021-06-11 23:21:36 · 547 阅读 · 3 评论 -
LC1312---- 让字符串成为回文串的最少插入次数
1312. 让字符串成为回文串的最少插入次数难度困难93给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。请你返回让 s 成为回文串的 最少操作次数 。「回文串」是正读和反读都相同的字符串。示例 1:输入:s = "zzazz"输出:0解释:字符串 "zzazz" 已经是回文串了,所以不需要做任何插入操作。package com.nie.o4;/* * *@auth wenzhao *@date 2021/4/15 23:33 */public cl原创 2021-04-22 23:15:41 · 136 阅读 · 0 评论 -
LC198--- 打家劫舍----LC213--- 打家劫舍II
198. 打家劫舍优秀的题解package com.nie.o2;/* * *@auth wenzhao *@date 2021/2/22 20:44 */public class LEE198 { public int rob1(int[] nums) { if (nums == null || nums.length == 0) { return 0; } if (nums.length == 1) {原创 2021-04-22 22:56:23 · 152 阅读 · 0 评论 -
LC516--- 最长回文子序列
516. 最长回文子序列难度中等431给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:"bbbab"输出:4动态规划1 public int longestPalindromeSubseq(String s) { int len = s.length(); if (len == 1) { return 1; } in原创 2021-04-22 00:43:48 · 90 阅读 · 0 评论 -
LC72--- 编辑距离
72. 编辑距离难度困难1562收藏分享切换为英文接收动态反馈给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删原创 2021-04-21 00:23:25 · 180 阅读 · 0 评论 -
LC179---- 最大数
179. 最大数难度中等691收藏分享切换为英文接收动态反馈给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。**注意:**输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例 1:输入:nums = [10,2]输出:"210"示例 2:输入:nums = [3,30,34,5,9]输出:"9534330"示例 3:输入:nums = [1]输出:"1"//compareTo()方法比较的时候是按照ASCII码逐位比较的/原创 2021-04-21 00:06:43 · 237 阅读 · 0 评论 -
剑指 04--- 二维数组中的查找----剑指05. 替换空格
剑指 Offer 04. 二维数组中的查找难度中等308在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23原创 2021-04-20 23:06:09 · 77 阅读 · 0 评论 -
快速排序-归并排序-堆排序
十大排序动图快速排序数组取标pivot,将小的元素放在pivot左边,大元素在右侧,然后依次对右边的子数组继续快排,以达到整个序列有序public class QuickSort { public static void quickSort(int[] array, int beain, int end) { if (beain >= end) return; int pivot = partition1(array, beain, end);原创 2021-04-12 17:14:24 · 125 阅读 · 0 评论 -
剑指 03--- 数组中重复的数字
剑指 Offer 03. 数组中重复的数字难度简单372找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 方法一:利用set集合,如每次添加的时候判重class Solution { public int findRepeatNumber(int[原创 2021-04-06 23:06:31 · 65 阅读 · 0 评论 -
LC146--- LRU 缓存机制
146. LRU 缓存机制难度中等1299运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存原创 2021-04-05 23:26:53 · 118 阅读 · 0 评论 -
布隆过滤器
布隆过滤器的原理和实现使用布隆过滤器解决缓存击穿、垃圾邮件识别、集合判重布隆过滤器 Python 代码示例布隆过滤器 Python 实现示例高性能布隆过滤器 Python 实现示例布隆过滤器 Java 实现示例 1布隆过滤器 Java 实现示例 2...原创 2021-04-05 23:01:46 · 82 阅读 · 0 评论 -
位运算--LC191-- 位1的个数___LC231--2的幂___LC190-- 颠倒二进制位__LC338-- 比特位计数
位运算文章目录位运算位运算的由来例如:例题[191. 位1的个数](https://leetcode-cn.com/problems/number-of-1-bits/)解法一:解法二:[231. 2的幂](https://leetcode-cn.com/problems/power-of-two/)解题:[190. 颠倒二进制位](https://leetcode-cn.com/problems/reverse-bits/)[338. 比特位计数](https://leetcode-cn.com/pro原创 2021-03-24 11:46:27 · 185 阅读 · 0 评论 -
LC36--- 有效的数独
36. 有效的数独难度中等484判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 '.' 表示。示例 1:输入:[ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","原创 2021-03-23 08:31:37 · 113 阅读 · 0 评论 -
LC51--- N 皇后
51. N 皇后难度困难787n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两个不同原创 2021-03-16 00:55:49 · 97 阅读 · 0 评论 -
LC130---被围绕的区域
130. 被围绕的区域难度中等488给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。示例 1:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GvKLMEwp-1615827270980)(https://assets.leetcode.com/uploads/2021/02/19/xogrid.jpg)]输入:board = [["X","X","X","X原创 2021-03-16 00:55:06 · 152 阅读 · 1 评论 -
并查集代码模板--java--python--C/C++ --- javaScript
并查集代码模板java class UnionFind { private int count = 0; private int[] parent; public UnionFind(int n) { count = n; parent = new int[n]; for (int i = 0; i < n; i++) { parent[i原创 2021-03-10 00:27:46 · 96 阅读 · 0 评论 -
LC208---实现 Trie (前缀树)
208. 实现 Trie (前缀树)难度中等549实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // 返回 falsetrie.startsWith("app"); // 返回 truetrie.insert("app"原创 2021-03-10 00:25:17 · 152 阅读 · 0 评论 -
LC200---岛屿数量
200. 岛屿数量难度中等1021给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"]]输出:1详细解析原创 2021-03-10 00:22:38 · 247 阅读 · 1 评论 -
LC79---单词搜索
79. 单词搜索难度中等820给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 wor原创 2021-03-10 00:20:38 · 140 阅读 · 0 评论 -
LC64---最小路径和
64. 最小路径和难度中等802给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。**说明:**每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。package com.nie.o2;/* * *@auth wenzhao *@date 2021/2/25 11:31 */public原创 2021-03-07 23:46:42 · 150 阅读 · 0 评论 -
LC32---最长有效括号
32. 最长有效括号难度困难1185给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()利用栈:思想:我们始终保持栈底元素为当前已经遍历过的元素中(最后一个没有被匹配的右括号的下标),这样的作法就是考虑边界条件的处理,栈里的其他元素维护左括号的下标对于遇到的每个"(",我们将它原创 2021-03-04 10:15:35 · 187 阅读 · 2 评论 -
LC322---零钱兑换
322. 零钱兑换难度中等1087给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1动态规划:详细题解class Solution {原创 2021-03-04 09:17:04 · 105 阅读 · 1 评论 -
LC152---乘积最大子数组
152. 乘积最大子数组难度中等963给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组标签:动态规划遍历数组时计算当前最大值,不断更新令imax为当前最大值,则当前最大值为 imax = max(ima原创 2021-03-04 09:15:56 · 151 阅读 · 1 评论 -
LC120---三角形最小路径和
120. 三角形最小路径和难度中等701给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。示例 1:输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]输出:11解释:如下面简图所示: 2 3 4 6 5原创 2021-03-04 09:15:15 · 88 阅读 · 1 评论 -
LC1143---最长公共子序列
1143. 最长公共子序列难度中等373给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 =原创 2021-03-01 10:18:00 · 202 阅读 · 0 评论 -
LC62---不同路径 ---LC63---不同路径 II
62. 不同路径难度中等898一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28动态规划我们令 dp[i][j] 是到达 i, j 最多路径动态方程:dp[i][j] = dp[i-1][j] + dp[i][j-1]注意,对于第一行dp[0][j],或者第一列dp[原创 2021-03-01 09:41:10 · 255 阅读 · 0 评论 -
递归代码模板--分治代码模板--动态规划的关键
递归代码模板Pythondef recursion(level, param1, param2, ...): #recursion terminator //递归终结者 if level >MAX_LEVEL: #process_result //过程的结果 return #process logic in current level //处理当前级别的逻辑 proc原创 2021-03-01 08:59:43 · 131 阅读 · 0 评论 -
LC322---零钱兑换
322. 零钱兑换难度中等1078给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1memo[i] 有两种实现的方式,去两者的最小值包含当前原创 2021-03-01 08:47:49 · 131 阅读 · 0 评论 -
LC55---跳跃游戏---LC45---跳跃游戏II
55. 跳跃游戏难度中等1047给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。由最后一个开始,倒推 public static boolean canJump(int[] nums) { if (num原创 2021-03-01 08:34:19 · 113 阅读 · 0 评论 -
LC297---二叉树的序列化与反序列化
297. 二叉树的序列化与反序列化文章目录[297. 二叉树的序列化与反序列化](https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/)广度优先遍历深度优先`Arrays.asList((data.split("")))`浅谈Arrays.asList()方法的使用`data.split("")`难度困难458序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,原创 2021-02-01 00:54:44 · 207 阅读 · 3 评论 -
LC98---验证二叉搜索树
98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。 根原创 2021-02-01 00:53:42 · 235 阅读 · 0 评论 -
LC104--二叉树的最大深度----LC111--- 二叉树的最小深度
104. 二叉树的最大深度文章目录[104. 二叉树的最大深度](https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/)广度优先深度优先[111. 二叉树的最小深度](https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/)思路难度简单783给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点原创 2021-02-01 00:52:51 · 182 阅读 · 1 评论 -
LC226--- 翻转二叉树
226. 翻转二叉树文章目录[226. 翻转二叉树](https://leetcode-cn.com/problems/invert-binary-tree/)广度优先遍历深度优先遍历难度简单743翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1广度优先遍历 public TreeNode invert原创 2021-02-01 00:51:25 · 202 阅读 · 2 评论 -
LC22--- 括号生成
22. 括号生成难度中等1538数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]package com.nie.OneJanLC;/* * *@auth wenzhao *@date 2021/1/29 19:37 */import java.util.Arr原创 2021-02-01 00:50:18 · 512 阅读 · 1 评论 -
LC70--爬楼梯
70. 爬楼梯难度简单1442假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?**注意:**给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶详细参考class Solution { public int climbStairs(int n) { int[] dp = new int[n + 1];原创 2021-02-01 00:49:20 · 168 阅读 · 0 评论 -
LC94--二叉树的中序遍历---144. 二叉树的前序遍历
94. 二叉树的中序遍历难度中等846给定一个二叉树的根节点 root ,返回它的 中序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,3,2]class Solution { public List<Integer> inorderTraversal(TreeNode root) { ArrayList<Integer> list = new ArrayList<>(); dfs(list原创 2021-02-01 00:25:36 · 151 阅读 · 0 评论 -
LC127-单词接龙
127. 单词接龙难度困难687字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列:序列中第一个单词是 beginWord 。序列中最后一个单词是 endWord 。每次转换只能改变一个字母。转换过程中的中间单词必须是字典 wordList 中的单词。给你两个单词 beginWord 和 endWord 和一个字典 wordList ,找到从 beginWord 到 endWord 的 最短转换序列 中的 单词数目 。如果不存原创 2021-01-31 01:25:03 · 277 阅读 · 1 评论 -
LC39-组合总和----LC40-组合总和 II
文章目录[39. 组合总和](https://leetcode-cn.com/problems/combination-sum/)[40. 组合总和 II](https://leetcode-cn.com/problems/combination-sum-ii/)39. 组合总和难度中等1141给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明原创 2021-01-30 09:49:16 · 274 阅读 · 0 评论 -
LC46-全排列----LC47-全排列 II
46. 全排列难度中等1089给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]回溯法:以数组 [1, 2, 3] 的全排列为例。先写以 11 开头的全排列,它们是:[1, 2, 3], [1, 3, 2],即 1 + [2, 3] 的全排列(注意:递归结构体现在这里);再写以 22 开头的全排列,它们是:[2,原创 2021-01-24 00:56:11 · 308 阅读 · 0 评论 -
LC77-组合
77. 组合难度中等471给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]回溯法: 是在一棵树上深度优先遍历(欣慰找到所有的解,所以要遍历)根据搜索起点画出二叉树深度优先遍历,因此首先画出树形结构,n = 4, k = 2,我们可以发现如下递归结构:如果组合里有 1 ,那么需要在 [2, 3, 4] 里原创 2021-01-24 00:54:13 · 377 阅读 · 0 评论