
数据结构与算法
数据结构与LeetCode实题演练
L# S@
这个作者很懒,什么都没留下…
展开
-
链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof示例:给定一个链表: 1->2->3->4->5, 和原创 2020-05-26 10:29:57 · 219 阅读 · 0 评论 -
二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1来源:力扣(LeetCode)链接:https://leetcode原创 2020-05-25 16:11:39 · 176 阅读 · 0 评论 -
数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element-in-a原创 2020-05-25 15:36:36 · 142 阅读 · 0 评论 -
560. 和为K的子数组
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subarray-sum-equals-kcl原创 2020-05-15 23:20:11 · 178 阅读 · 0 评论 -
1091. 二进制矩阵中的最短路径
在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1)。一条从左上角到右下角、长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, …, C_k 组成:相邻单元格 C_i 和 C_{i+1} 在八个方向之一上连通(此时,C_i 和 C_{i+1} 不同且共享边或角)C_1 位于 (0, 0)(即,值为 grid[0][0])C_k 位于 (N-1, N-1)(即,值为 grid[N-1][N-1])如果 C_i 位于 (r, c),则 grid[r][c] 为原创 2020-05-10 15:02:49 · 192 阅读 · 0 评论 -
有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-sudoku示例 1:输入:[ ["5","3",".",".",原创 2020-05-09 15:36:42 · 144 阅读 · 0 评论 -
N皇后
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数 n,返回 n 皇后不同的解决方案的数量。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/n-queens-ii示例:输入: 4输出: 2解释: 4 皇后问题存在如下两个不同的解法。[ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..原创 2020-05-09 15:34:48 · 146 阅读 · 0 评论 -
矩阵中的路径
静态变量递归的时候不回溯请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占原创 2020-05-08 22:47:32 · 136 阅读 · 0 评论 -
200. 岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-islands示例 1:输入:111101101011...转载 2020-05-08 16:50:31 · 178 阅读 · 0 评论 -
替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。一个空格要替换成三个字符(%20),所以当遍历到一个空格时,需要在尾部填充两个任意字符 public static String replaceSpace(StringBuffer str) { int i = st...原创 2020-04-28 17:56:08 · 95 阅读 · 0 评论 -
数组中的重复数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。public class Solution { // Parameters: // numbers: ...原创 2020-04-28 17:02:01 · 131 阅读 · 0 评论 -
二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int[][] array) { if (array == null ||...原创 2020-04-28 17:00:51 · 101 阅读 · 0 评论 -
合并K个排序链表
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-k-sorted...原创 2020-04-27 00:25:28 · 114 阅读 · 0 评论 -
用栈实现队列
使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); ...原创 2020-04-26 22:47:31 · 104 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所...原创 2020-04-23 22:44:10 · 146 阅读 · 0 评论 -
两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> ...原创 2020-04-23 20:15:06 · 112 阅读 · 0 评论 -
硬币
硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1:输入: n = 5输出:2解释: 有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2:输入: n = 10输出:4解释: 有四种方式可以凑成总金额:10=1010=5+510=5+1+1+1+1+110=1+...原创 2020-04-23 17:57:44 · 222 阅读 · 0 评论 -
初级排序与高级排序
排序算法1.比较类排序通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序2.非比较类排序(一般用于整型相关的数据类型)不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。初级排序(O(n^2))1.选择排序每次找最小值,然后放到待排序数组的起始位置2.插入排序从前...原创 2020-04-19 15:23:59 · 516 阅读 · 0 评论 -
B+树详述
B+树的特性B+树和B树一样都是多路平衡树,也叫多叉树。两者的性质也基本一致。B+树大部分特性都和B树一样,唯一不同的只有以下几点:所有的数据都存储在叶子节点,中间节点不存放数据中间节点的元素数量和子树数量一致,而B树子树数量比元素数量多1叶子节点是一个链表,可以通过指针顺序查找从上图我们可以看到,所有出现在中间节点的元素都能在叶子节点当中找到,这对应了刚才说的所有数据都存放在叶...转载 2020-04-18 16:33:04 · 1031 阅读 · 0 评论 -
B树详解
B树B树,一般都被叫做B-树。定义B树中的每个节点的元素和子树数量是有限的,除了根节点外,所有节点最多拥有M-1个元素,所有非叶子非根节点最多拥有M个子树,即为M阶树。根节点至少拥有两个子树,除了根节点之后的非叶子节点拥有K个子树以及K-1个元素((M+1)/2<K<M),元素按照递增或递减顺序排列所有叶子节点属于同一层B树的查找因为B树当中一个节点对应的K个子树和它...转载 2020-04-18 15:17:15 · 4307 阅读 · 0 评论 -
322. 零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1来源:力扣(Leet...原创 2020-04-17 17:47:46 · 226 阅读 · 0 评论 -
198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号...原创 2020-04-17 17:17:00 · 115 阅读 · 0 评论 -
53. 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-subarray解法神奇:cla...原创 2020-04-17 15:05:36 · 91 阅读 · 0 评论 -
1143. 最长公共子序列
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没...原创 2020-04-17 01:07:18 · 162 阅读 · 0 评论 -
120. 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/triangleclass Solution ...原创 2020-04-17 01:01:22 · 109 阅读 · 0 评论 -
63. 不同路径 II
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。说明:m 和 n 的值均不超过 100。示例 1:输入:[[0,0,0],[0...原创 2020-04-16 22:22:19 · 139 阅读 · 0 评论 -
深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS)1.访问顶点v;2.依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;3.若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止广度优先搜索(BFS)首先将根节点放入队列中。从队列中取出第一个节点,并检验它是否为目标。如果找到目标,则结束搜寻并回传结果。否则将它所有尚未...原创 2020-04-16 14:44:25 · 309 阅读 · 0 评论 -
17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。来源:力扣(LeetCode)链接:ht...原创 2020-04-15 18:30:31 · 155 阅读 · 0 评论 -
169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-...原创 2020-04-15 18:01:19 · 128 阅读 · 0 评论 -
78. 子集
回溯算法回溯法采用试错的思想,它尝试分布的去解决一个问题。在分布解决问题的过程中,当它通过尝试发现现有的发布答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其他的可能的发布的解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法实现,在反复重复上述的步骤之后可能出现两种情况:找到一个可能存在的正确答案。在尝试了所有可能的分布方法后宣告该问题没有答案题给...原创 2020-04-15 17:53:30 · 118 阅读 · 0 评论 -
50. Pow(x, n)
实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有...原创 2020-04-15 17:22:47 · 128 阅读 · 0 评论 -
二叉搜索树、AVL树、红黑树
二叉搜索树二叉搜索树,也称有序二叉树、排序二叉树,是指一颗空数树或者具有下列性质的二叉树:1.左子树上所有结点的值都小于它的根结点的值;2.右子树上所有结点的值都大于它的根结点的值;3.以此类推,左、右子树也分别为二叉查找树中序遍历 :升序排序保证性能的关键1.保证二维维度!——> 左右子树结点平衡2.保证是平衡的AVL树时间复杂度是O(logn)1.平衡因子:是它的...原创 2020-04-14 22:45:49 · 329 阅读 · 0 评论 -
二叉树的深度
二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。class Solution { public int m...原创 2020-04-12 15:41:56 · 176 阅读 · 0 评论 -
翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/invert-binary-treeclass S...原创 2020-04-12 15:03:22 · 118 阅读 · 0 评论 -
98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3...原创 2020-04-12 13:10:05 · 107 阅读 · 0 评论 -
22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:输入:n = 3输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]使用递归 在添加括号的时候 加入 判断条件class Solution { private List<String> res; pu...原创 2020-04-12 10:29:19 · 189 阅读 · 1 评论 -
二叉树的遍历
二叉树的前序遍历:根左右二叉树的中序遍历:左根右二叉树的后序遍历:右根左给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]class Solution { public List < Integer > inorderTraversal(TreeNode root) { List <...原创 2020-04-10 21:18:12 · 131 阅读 · 0 评论 -
49. 字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。来源:力扣(LeetCode)链接:https...原创 2020-04-04 23:36:38 · 123 阅读 · 0 评论 -
239. 滑动窗口最大值
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sliding-window-maximumpublic int[] maxSlidingWindow(int...原创 2020-04-04 19:27:32 · 149 阅读 · 0 评论 -
哈希表、映射、集合的实现与特性
哈希表哈希表(Hash table),也叫散列表,是根据关键码值(key value)而直接进行访问的数据结构。它提过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数(Hash Function),存放记录的数组叫做哈希表。哈希表的实现原理假如 我们要存放一个lies字符串 如果存?我们通过哈希函数,将lies传给哈希函数之后,它就会返回一个下标,这...原创 2020-04-02 22:26:28 · 386 阅读 · 0 评论