Leetcode
文章平均质量分 81
就叫昵称吧
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
树状数组
文章目录1 lowbit运算2 问题3 树状数组(Binary Indexed Tree, BIT)3.1 单点更新与区间查询4 参考资料1 lowbit运算 lowbitlowbitlowbit运算:lowbit(x)=x&(−x)lowbit(x) = x\&(-x)lowbit(x)=x&(−x),它的作用是取xxx的二进制最右边的1和它右边所有0。 整数在计算机中采用补码存储,xxx变为−x-x−x的过程就是按位取反后末位加1。二者与操作后就得到了xxx最右边的1和原创 2021-06-17 14:34:38 · 442 阅读 · 1 评论 -
生成组合(Gray码)
文章目录1 问题描述2 问题转换2.1 生成{xn−1,⋯ ,x1,x0}\{x_{n-1}, \cdots, x_1, x_0\}{xn−1,⋯,x1,x0}的子集的二进制算法3 Gray码3.1 递归生成反射GrayGrayGray码3.2 迭代生成反射GrayGrayGray码4 参考资料1 问题描述 设SSS是nnn个元素的集合:S={xn−1,⋯ ,x1,x0}S=\{x_{n-1}, \cdots, x_1, x_0\}S={xn−1,⋯,x1,x0}我们想要寻找一种生原创 2020-08-10 14:52:52 · 1259 阅读 · 0 评论 -
洗牌算法(Knuth-Durstenfeld Shuffle)
1 原理 洗牌算法的思想很简单。给你一个数组[1,2,3,4,5,6,7][1,2,3,4,5,6,7][1,2,3,4,5,6,7]让你洗一洗,思路就是交换,从第一个元素开始,与包括它以及在它之后的所有元素进行交换。然后在交换第二个数,以此类推。2 实现def shuffle(arr): n = len(arr) for i in range(n): # 生成随机数 j = random.randint(i, n - 1) # 交换元素原创 2020-07-19 16:02:19 · 1063 阅读 · 0 评论 -
字典树(单词查找树、Trie)
文章目录单词查找树1 基本概念2 字典树的应用3 字典树基本操作的实现4 参考资料单词查找树1 基本概念 百度百科对字典树的介绍为:是一种树形结构,是一种哈希树的变种。 《算法4》对字典树的介绍为:它由字符串键中的所有字符构造而成,允许使用被查找键中的字符进行查找。 不管各种材料对它的描述如何,总之它是长成下图这样的。 从图中我们可以很清楚的看到,从字典树的根节点到每个叶子节点的路径都是一个字符串。很显然,这样存储字符串会节约很多空间(例如上图中的NEWS和NOT公共前缀N只存一次就好原创 2020-06-22 23:26:26 · 1482 阅读 · 0 评论 -
单源最短路径(Bellman-Ford、Dijkstra)
文章目录单源最短路径1 预备知识1.1 最短路径问题1.2 最短路径的几个变体问题1.3 最短路径的最优子结构1.4 负权重的边1.5 环路单源最短路径 本文参考整理及图片来源:《算法导论》1 预备知识1.1 最短路径问题 假设你需要找到一条从AAA市到BBB市的一条最短路径,先给定一幅道路交通图,上面标有所有相邻城市之间的距离。你要怎样才能找出AAA到BBB的最短距离呢? 要解决这个问题,我们最直观的想法就是把AAA到BBB的所有路径都找出来,计算这些路径的长度,选取其中最短的路径。但这原创 2020-05-22 14:08:30 · 1357 阅读 · 0 评论 -
拓扑排序
文章目录拓扑排序1 定义2 一个例子3 伪代码参考资料及图片来源:《算法导论》P355-356图的表示、深度优先搜索、广度优先搜索等先验知识可以参考这里。拓扑排序1 定义 对于一个有向无环图G=(V,E)G=(V, E)G=(V,E)来说,其拓扑排序是GGG中所有节点的一种线性次序,该次序满足条件:如果图GGG包含边(u,v)(u, v)(u,v),则节点uuu在拓扑排序中处于节点vv...原创 2020-04-29 15:28:11 · 467 阅读 · 0 评论 -
图、广度优先搜索、深度优先搜索
文章目录图1 图的表示1.1 邻接链表1.2 邻接矩阵2 广度优先搜索(BFSBFSBFS)2.1 算法简介2.2 伪代码描述图1 图的表示 图G=(V,E)G=(V,E)G=(V,E),VVV代表节点,EEE代表边。图可以用两种标准表示方法表示——邻接链表和邻接矩阵。两种表示方法都既可以表示无向图,又可以表示有向图。1.1 邻接链表 邻接链表通常用于表示稀疏图(边的数目∣E∣|E|...原创 2020-04-27 23:33:29 · 884 阅读 · 1 评论 -
堆、堆排序、优先队列
文章目录堆1 (二叉)堆2 二叉堆的两种形式3 维护堆的性质4 建堆5 堆排序6 优先队列6.1 最大值(MAXIMUMMAXIMUMMAXIMUM)6.2 返回并弹出最大值(EXTRACT−MAXEXTRACT-MAXEXTRACT−MAX)6.3 增大关键字(INCREASE−KEYINCREASE-KEYINCREASE−KEY)6.4 插入(INSERTINSERTINSERT)6.5 优...原创 2020-03-31 12:50:50 · 603 阅读 · 0 评论 -
二叉搜索树
文章目录二叉搜索树1 二叉搜索树的性质2 查询二叉搜索树本文参考:《算法导论》P286~P307二叉搜索树 二叉搜索树由一棵二叉树组织。这样的一棵树可以使用一个链表的数据结构来表示,每个节点就是一个对象。节点的属性值包含leftleftleft(左孩子)、rightrightright(右孩子)、parentparentparent(双亲)、valuevaluevalue(关键字/节点值)...原创 2020-03-24 12:59:22 · 571 阅读 · 0 评论 -
Manacher算法详解
文章目录1 算法背景2 常规求解3 Manacher算法3.1 字符串预处理3.2 回文半径数组3.3 对称关系3.4 填充数组3.5 算法流程以及伪代码3.6 实例4 结束1 算法背景 Manacher算法用于解决最长回文子串问题。给定字符串sss,求其最长回文子串,回文子串形如abaabaaba、abbaabbaabba。例如:s = "abcbbc"回文子串有:"bcb"、"cbb...原创 2020-02-28 18:55:46 · 983 阅读 · 0 评论 -
Leetcode 1.两数之和(Two Sum)
Leetcode 1.两数之和1 题目描述(Leetcode题目链接) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + num...原创 2020-01-21 12:37:08 · 185 阅读 · 0 评论 -
Leetcode 2.两数相加(Add Two Numbers)
Leetcode 2.两数相加1 题目描述(Leetcode题目链接) 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:(2 -> 4 -> 3) + (5 -&g...原创 2020-01-31 12:08:32 · 222 阅读 · 0 评论 -
Leetcode 5.最长回文子串(Longest Palindromic Substring)
Leetcode 5.最长回文子串1 题目描述(Leetcode题目链接) 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。2 题解 本题可以使用动态规划的方法,子串不是子序列,需要连续,因此可以定义DP[i][j]DP[i][j]DP[i][j]为字符i...原创 2020-02-26 13:45:44 · 414 阅读 · 0 评论 -
Leetcode 6.Z字型变换(ZigZag Conversion)
Leetcode 6.Z字型变换1 题目描述(Leetcode题目链接) 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串:“LCIRETO...原创 2020-01-25 10:09:03 · 234 阅读 · 0 评论 -
Leetcode 9.回文数(Palindrome Number)
Leetcode 9.回文数1 题目描述(Leetcode题目链接) 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。输入: 121输出: true2 题解 可以将整数转换为字符串类型,然后再从两边往中间遍历...原创 2020-01-25 10:04:20 · 227 阅读 · 0 评论 -
Leetcode 11.盛水最多的容器(Container With Most Water)
Leetcode 11.盛水最多的容器1 题目描述(Leetcode题目链接) 给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代...原创 2020-01-25 10:04:54 · 160 阅读 · 0 评论 -
Leetcode 13.罗马数字转整数(Roman to Integer)
Leetcode 13.罗马数字转整数1 题目描述(题目链接) 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M ...原创 2020-01-21 12:38:27 · 192 阅读 · 0 评论 -
Leetcode 14.最长公共前缀(Longest Common Prefix)
Leetcode 14.最长公共前缀1 题目描述(Leetcode题目链接) 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。输入: ["flower","flow","flight"]输出: "fl"输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。2...原创 2020-03-12 11:44:14 · 208 阅读 · 0 评论 -
Leetcode 15.三数之和(3Sum)
Leetcode 15.三数之和1 题目描述(Leetcode题目链接) 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0,...原创 2020-01-30 11:14:45 · 205 阅读 · 0 评论 -
Leetcode 16.最接近的三数之和(3Sum Closest)
Leetcode 16.最接近的三数之和1 题目描述(Leetcode题目链接) 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为...原创 2020-01-30 11:13:58 · 226 阅读 · 0 评论 -
Leetcode 17.电话号码的字母组合(Letter Combinations of a Phone Number)
Leetcode 17.电话号码的字母组合1 题目描述(Leetcode题目链接) 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列...原创 2020-03-04 10:26:36 · 199 阅读 · 0 评论 -
Leetcode 18.四数之和(4Sum)
Leetcode 18.四数之和1 题目描述(Leetcode题目链接) 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。给定数组 nums = [1, 0, -1, 0, -2,...原创 2020-01-30 11:15:16 · 416 阅读 · 0 评论 -
Leetcode 19.删除链表的倒数第N个节点(Remove Nth Node From End of List)
Leetcode 19.删除链表的倒数第N个节点1 题目描述(Leetcode题目链接) 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫...原创 2020-01-25 10:11:39 · 177 阅读 · 0 评论 -
Leetcode 20.有效的括号(Valid Parentheses)
Leetcode 20.有效的括号1 题目描述(Leetcode题目链接) 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。输入: "()[]{}"输出: true输入: "(]"输出: false输入: "...原创 2020-04-01 10:33:29 · 260 阅读 · 0 评论 -
Leetcdoe 21. 合并两个有序链表(Merge Two Sorted Lists)
Leecode 21.合并两个有序链表1 题目描述(Leetcode题目链接) 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:1->2->4, 1->3->4输出:1->1->2->3->4->42 题解 归并排序。# Definition for singly-linke...原创 2020-02-16 12:55:35 · 195 阅读 · 0 评论 -
Leetcode 22.括号生成(Generate Parentheses)
Leetcode 22.括号生成1 题目描述(Leetcode题目链接) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]2 题解 深度优先搜索比较容易思考,递归中判断两种情况:...原创 2020-02-29 12:21:09 · 197 阅读 · 0 评论 -
Leetcode 23.合并K个排序链表(Merge k Sorted Lists)
Leetcode 23.合并K个排序链表1 题目描述(Leetcode题目链接) 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->62 题解 以链表头结点值建立最小堆...原创 2020-04-26 11:16:44 · 321 阅读 · 0 评论 -
Leetcode 24.两两交换链表中的节点(Swap Nodes in Pairs)
Leetcode 24.两两交换链表中的节点1 题目描述(Leetcode题目链接) 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定 1->2->3->4, 你应该返回 2->1->4->3.2 题解 可以使用前后两指针,同时移动,交换指针所指位置的节点。# Defi...原创 2020-01-31 12:10:17 · 175 阅读 · 0 评论 -
Leetcode 25.K 个一组翻转链表(Reverse Nodes in k-Group)
Leetcode 25.K 个一组翻转链表1 题目描述(Leetcode题目链接) 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1-&g...转载 2020-04-15 11:51:59 · 222 阅读 · 0 评论 -
Leetcode 26.删除排序数组中的重复项(Remove Duplicates from Sorted Array)
Leetcode 26.删除排序数组中的重复项1 题目描述(Leetcode题目链接) 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为...原创 2020-02-23 13:49:30 · 153 阅读 · 0 评论 -
Leetcode 27.移除元素(Remove Element)
Leetcode 27.移除元素1 题目描述(Leetcode题目链接) 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。给定 nums = [0,1,2,2,3,0,4,2], ...原创 2020-01-31 12:06:55 · 243 阅读 · 0 评论 -
Leetcode 31.下一个排列(Next Permutation)
Leetcode 31.下一个排列1 题目描述(Leetcode题目链接) 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1...原创 2020-01-31 12:09:32 · 254 阅读 · 0 评论 -
Leetcode 33.搜索旋转排序数组(Search in Rotated Sorted Array)
Leetcode 33.搜索旋转排序数组1 题目描述(Leetcode题目链接) 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别...原创 2020-02-22 13:42:33 · 188 阅读 · 0 评论 -
Leetcode 34.在排序数组中查找元素的第一个和最后一个位置(Find First and Last Position of Element in Sorted Array)
Leetcode 34.在排序数组中查找元素的第一个和最后一个位置1 题目描述(Leetcode题目链接) 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。输入: nums = [5,7,7,8,8,10], tar...原创 2020-03-02 15:53:23 · 195 阅读 · 0 评论 -
Leetcode 35.搜索插入位置(Search Insert Position)
Leetcode 35.搜索插入位置1 题目描述(Leetcode题目链接) 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。输入: [1,3,5,6], 5输出: 2输入: [1,3,5,6], 2输出: 1输入: [1,3,5,6], 7输出: 4输入: [1,3,5,...原创 2020-02-25 14:21:00 · 204 阅读 · 0 评论 -
Leetcode 36. 有效的数独(Valid Sudoku)
Leetcode 36.有效的数独1 题目描述(Leetcode题目链接) 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。数独部分空格内已填入了数字,空白格用 ‘.’ 表示。输入:[ ["5","...原创 2020-02-12 14:09:48 · 207 阅读 · 0 评论 -
Leetcode 37. 解数独(Sudoku Solver)
Leetcode 37.解数独1 题目描述(Leetcode题目链接) 编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。Note:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以...原创 2020-02-12 14:13:57 · 253 阅读 · 0 评论 -
Leetcode 39.组合总和(Combination Sum)
Leetcode 39.数组总和1 题目描述(Leetcode题目链接) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。输入: candidates = [2,3,6,7], target = 7,所求解集为:[ [7], [...原创 2020-01-27 10:13:41 · 311 阅读 · 0 评论 -
Leetcode 40.组合总和 II(Combination Sum II)
Leetcode 40.组合总和 II1 题目描述(Leetcode题目链接) 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。输入: candidates = [10,...原创 2020-01-27 10:14:08 · 204 阅读 · 0 评论 -
Leetcode 41. 缺失的第一个正数(First Missing Positive)
Leetcode 41. 缺失的第一个正数1 题目描述(Leetcode题目链接) 给定一个未排序的整数数组,找出其中没有出现的最小的正整数。输入: [1,2,0]输出: 3输入: [3,4,-1,1]输出: 2输入: [7,8,9,11,12]输出: 1说明:你的算法的时间复杂度应为O(n)O(n)O(n),并且只能使用常数级别的空间。2 题解 由于题目要求时间复...原创 2020-02-14 15:28:12 · 189 阅读 · 0 评论
分享