
LeetCode
文章平均质量分 66
力扣(LeetCode)是领扣网络旗下专注于程序员技术成长和企业技术人才服务的品牌。源自美国硅谷,力扣为全球程序员提供了专业的IT 技术职业化提升平台,有效帮助程序员实现快速进步和长期成长。
AI算法攻城狮
互联网算法工程师,拥有扎实的理论基础和丰富的算法落地实践经验
展开
-
Leetcode 栈、链表、双指针刷题攻略
No.19 删除链表的倒数第N个节点:https://xingqijiang.blog.youkuaiyun.com/article/details/109878465No.21 合并两个有序链表:https://xingqijiang.blog.youkuaiyun.com/article/details/110007691No.24 两两交换链表中的节点:https://xingqijiang.blog.youkuaiyun.com/article/details/110881098No.25 K 个一组翻转链表:https:原创 2021-02-09 11:47:22 · 414 阅读 · 0 评论 -
Leetcode 刷题攻略
哈希表No.1 两数之和:https://xingqijiang.blog.youkuaiyun.com/article/details/107133542链表No.2 两数相加:https://xingqijiang.blog.youkuaiyun.com/article/details/107591610滑动窗口No.3 无重复字符的最长子串:https://xingqijiang.blog.youkuaiyun.com/article/details/107625709No.4 寻找两个正序数组的中位数:h.原创 2021-02-06 08:17:18 · 493 阅读 · 0 评论 -
Leetcode 数学运算&数组&字符串刷题攻略
No.7 整数反转:https://xingqijiang.blog.youkuaiyun.com/article/details/108024667No.8 字符串转换整数 (atoi):https://xingqijiang.blog.youkuaiyun.com/article/details/108033868No.9 回文数:https://xingqijiang.blog.youkuaiyun.com/article/details/108417720No.29 两数相除:https://xingqijiang.blo原创 2021-02-13 22:05:43 · 395 阅读 · 0 评论 -
Leetcode No.1 两数之和
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]package twosum;import java.util.HashMap;import java.util.Map;...原创 2020-07-05 01:16:52 · 1317 阅读 · 0 评论 -
Leetcode No.2 两数相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807方法:初等数学思路我们使用变量来跟踪进位,并从包含最低...原创 2020-07-26 12:12:27 · 949 阅读 · 0 评论 -
Leetcode No.3 无重复字符的最长子串(滑动窗口)
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串...原创 2020-07-28 01:05:14 · 1109 阅读 · 4 评论 -
Leetcode No.4 寻找两个正序数组的中位数
给定两个大小为 m 和 n 的正序(从小到大)数组nums1 和nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5思路:简单粗暴,先将两个数组合并,两个有序数组的合并也是归并排...原创 2020-08-02 01:01:54 · 754 阅读 · 0 评论 -
Leetcode No.5 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"方法一:暴力匹配 (Brute Force)根据回文子串的定义,枚举所有长度大于等于 22 的子串,依次判断它们是否是回文;在具体实现时,可以只针对大于“当前得到的最长回文子串长度”的子串进行“回文验证”;在记录最长回文子串的时候,可以只记录“当前子串的起始.原创 2020-08-02 22:21:59 · 666 阅读 · 0 评论 -
Leetcode No.6 Z字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T OE S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示...原创 2020-08-09 12:41:54 · 824 阅读 · 0 评论 -
Leetcode No.7 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−2^31,2^31− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。思路一:把32位的有符号整数转化为字符串首先处理符号位,假如是负数,记符号位为‘-’,假如是正数,记符号位为‘’;其次...原创 2020-08-15 16:54:52 · 506 阅读 · 0 评论 -
Leetcode No.8 字符串转换整数 (atoi)
请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非空格字符不是一个有效整..原创 2020-08-16 11:33:43 · 644 阅读 · 0 评论 -
Leetcode No.9 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。思路:将整数转换成字符串,借助于栈,将字符串翻转,与原字符串比较,相同即回文数public class Solu.原创 2020-09-05 11:57:53 · 476 阅读 · 0 评论 -
Leetcode No.10 正则表达式匹配
一、题目描述给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z的小写字母,以及字符.和*。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:...原创 2020-09-06 11:26:10 · 444 阅读 · 1 评论 -
Leetcode No.11 盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49方法...原创 2020-09-12 17:52:09 · 582 阅读 · 0 评论 -
Leetcode No.12 整数转罗马数字
题目描述罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II...原创 2020-09-13 11:58:06 · 550 阅读 · 0 评论 -
LeetCode No.13 罗马数字转整数
一、题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。27 写做 XXVII, 即...原创 2020-10-10 14:24:16 · 493 阅读 · 0 评论 -
LeetCode No.14 最长公共前缀
一、题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。二、解题思路1、判断字符串数组的长度,如果长度为0,则返回空字符串2、遍历字符串数组,确定字符串的最短长度min,同时min也是公共子...原创 2020-10-10 15:28:02 · 485 阅读 · 0 评论 -
Leetcode No.15 三数之和
一、题目描述给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]二、解题思路暴力法的时间复杂度是O(n^3)。可以先固定一个值,然后寻找后两个值时可采取双指针的方法,将总...原创 2020-10-11 21:20:39 · 505 阅读 · 0 评论 -
Leetcode No.16 最接近的三数之和
一、题目描述给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3<= nums[i]<= 10^3...原创 2020-10-24 13:31:22 · 412 阅读 · 0 评论 -
Leetcode No.18 四数之和
一、题目描述给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, ...原创 2020-11-18 20:27:07 · 444 阅读 · 0 评论 -
Leetcode No.19 删除链表的倒数第N个节点
一、题目介绍给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。二、解题思路由于我们需要找到倒数第 n 个节点,因此我们可以使用两个指针 fast 和 slow同时对链表进行遍历,并且 fast比 slow 超前 nn 个节点。当 fast遍历到链表的末尾时,sl...原创 2020-11-20 22:46:33 · 496 阅读 · 0 评论 -
Leetcode No.20 有效的括号
一、题目描述给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输入: "([)]"输出: false示例5:输入: "{[]}"输出: true...原创 2020-11-21 16:18:03 · 449 阅读 · 0 评论 -
Leetcode No.21 合并两个有序链表
一、题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4二、解题思路我们可以用迭代的方法来实现上述算法。当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。首先,我们设定一个.原创 2020-11-23 21:05:52 · 404 阅读 · 0 评论 -
Leetcode No.22 括号生成
一、题目描述数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例:输入:n = 3输出:[ "((()))", "(()())", "(())()", "()(())", "()()()" ]二、解题思路深度遍历DFS+剪枝我们以n = 2为例,画树形结构图。方法是 「做减法」。当前左右括号都有大于 0个可以使用的时候,才产生分支;产生左分支的...原创 2020-11-26 22:01:38 · 454 阅读 · 0 评论 -
Leetcode No.23 合并K个升序链表
一、题目描述给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:l...原创 2020-11-28 18:16:08 · 521 阅读 · 0 评论 -
Leetcode No.24 两两交换链表中的节点
一、题目描述给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100二、解题思路可以通过递归的方式实现两两交换链表中的节点。递原创 2020-12-08 20:35:29 · 414 阅读 · 0 评论 -
Leetcode No.25 K 个一组翻转链表
一、题目描述给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单...原创 2020-12-12 23:21:58 · 451 阅读 · 0 评论 -
Leetcode No.26 删除排序数组中的重复项
一、题目描述给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回...原创 2020-12-10 21:50:01 · 355 阅读 · 0 评论 -
Leetcode No.27 移除元素
一、题目描述给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0...原创 2020-12-11 20:48:50 · 357 阅读 · 0 评论 -
Leetcode No.28 实现 strStr()
一、题目描述实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bba"输出: -1说明:当needle是空字符串时,我们应当返回什么值呢?这是一...原创 2020-12-14 19:28:18 · 684 阅读 · 0 评论 -
Leetcode No.29 两数相除
一、题目描述给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333…) = trunc原创 2020-12-20 15:02:08 · 539 阅读 · 4 评论 -
Leetcode No.30 串联所有单词的子串
给定一个字符串s和一些长度相同的单词words。找出 s 中恰好可以由words 中所有单词串联形成的子串的起始位置。注意子串要与words 中的单词完全匹配,中间不能有其他字符,但不需要考虑words中单词串联的顺序。示例 1:输入: s = "barfoothefoobarman", words = ["foo","bar"]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。输出的顺序不重要, [9,0] 也是...原创 2021-01-03 23:41:44 · 401 阅读 · 0 评论 -
Leetcode No.31 下一个排列
一、题目描述实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]示例 2:输入:nums = [3,2,1]输出:[1,2,3]示例 3:输入:nums = [1,1,5]输出:[1,5,1]示例 4:输入:nums = [1]输出:[1]原创 2021-01-11 13:56:56 · 372 阅读 · 0 评论 -
Leetcode No.32 最长有效括号
一、题目描述给你一个只包含 '('和 ')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"示例 3:输入:s = ""输出:0提示:0 <= s.length <= 3 * 104s[i] 为 '(' 或 ')'二、解题思路从左往右扫描,已扫描的左括号等待被匹配,用..原创 2021-01-17 01:56:12 · 479 阅读 · 0 评论 -
Leetcode No.36 有效的数独
一、题目描述判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。示例1:输入:[["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",...原创 2021-01-23 23:09:54 · 382 阅读 · 0 评论 -
Leetcode No.37 解数独(回溯)
一、题目描述请你判断一个9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。示例 1:输入:board =[["5","3",".",".","...原创 2021-09-24 20:02:04 · 316 阅读 · 0 评论 -
Leetcode No.38 外观数列
一、题目描述给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221第一项是数字 1描述前一项,...原创 2021-02-01 20:47:00 · 426 阅读 · 0 评论 -
Leetcode No.41 缺失的第一个正数
一、题目描述给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。进阶:你可以实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案吗?示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1提示:0 <= nums.length <= 300-2^31 <= nums[i] <= 2^31 - 1原创 2021-01-31 23:12:02 · 516 阅读 · 1 评论 -
Leetcode No.42 接雨水
题目链接:https://leetcode-cn.com/problems/trapping-rain-water给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6方法 1:暴力直观想法直接按问题描述进行。对于数组..原创 2020-06-20 20:23:42 · 1390 阅读 · 0 评论 -
Leetcode No.43 字符串相乘
一、题目描述给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1和num2的长度小于110。num1 和num2 只包含数字0-9。num1 和num2均不以零开头,除非是数字 0 本身。不能使用任何标准库的...原创 2021-02-14 00:19:46 · 377 阅读 · 3 评论