![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
春水煎茶
这个作者很懒,什么都没留下…
展开
-
#26:删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝int ...原创 2021-11-09 15:33:19 · 79 阅读 · 0 评论 -
*#44:通配符匹配
给定一个字符串(s) 和一个字符模式(p) ,实现一个支持'?'和'*'的通配符匹配。'?' 可以匹配任何单个字符。'*' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z的小写字母,以及字符?和*。示例1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例2:输入:s = "aa"p...原创 2021-12-28 17:54:23 · 237 阅读 · 0 评论 -
#43:字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例2:输入: num1 = "123", num2 = "456"输出: "56088"方法一:做加法class Solution{ public String multiply(String num1,String num2){ if(num1....原创 2021-12-28 16:27:20 · 90 阅读 · 0 评论 -
*#42:接雨水
给定n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [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 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9方法一:动态规划class Solution{ public...原创 2021-12-28 11:56:39 · 83 阅读 · 0 评论 -
#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方法一:哈希表class Solution{ public int firstMissingPositive(int[] nums){ .原创 2021-12-27 20:00:14 · 269 阅读 · 0 评论 -
*#39:组合总和
给定一个无重复元素的正整数数组candidates和一个正整数target,找出candidates中所有可以使数字和为目标数target的唯一组合。candidates中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。对于给定的输入,保证和为target 的唯一组合数少于 150 个。示例1:输入: candidates = [2,3,6,7], target = 7输出: [[7],[2,2,3]]示例2:输入: c...原创 2021-12-10 11:50:49 · 62 阅读 · 0 评论 -
*#38:外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = "1"countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:1. 12. 113. 214. 12115. 111221第一项是数字 1描述前一项,这个数是 1 即...原创 2021-12-10 10:53:21 · 400 阅读 · 0 评论 -
*#37:解数独
编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用'.'表示。输入:board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8","...原创 2021-11-13 20:24:46 · 336 阅读 · 0 评论 -
#36:有效的数独
方法一:一次遍历有效的数独满足以下三个条件:同一个数字在每一行只能出现一次;同一个数字在每一列只能出现一次;同一个数字在每一个小九宫格只能出现一次。可以使用哈希表记录每一行、每一列和每一个小九宫格中,每个数字出现的次数。只需要遍历数独一次,在遍历的过程中更新哈希表中的计数,并判断是否满足有效的数独的条件即可。class Solution{ public boolean isValidSudoku(char[][] board){ int[][] r...原创 2021-11-13 11:35:01 · 84 阅读 · 0 评论 -
#35:搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4方法一:二分查找...原创 2021-11-12 17:39:38 · 69 阅读 · 0 评论 -
#34:在排序数组中查找元素的第一个和最后一个位置
class Solution{ public int[] searchRange(int[] nums,int target){ int leftIdx=binarySearch(nums,target,true); int righIdx=binarySearch(nums,target,false)-1; if(leftIdx<=) } public int binarySearch(int[] nums,int t...原创 2021-11-12 17:07:39 · 114 阅读 · 0 评论 -
#33:搜索旋转排序数组
整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为[4,5,6,7,0,1,2] 。...原创 2021-11-11 16:48:39 · 299 阅读 · 0 评论 -
#32:最长有效括号
给你一个只包含 '('和 ')'的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = "(()"输出:2解释:最长有效括号子串是 "()"示例 2:输入:s = ")()())"输出:4解释:最长有效括号子串是 "()()"示例 3:输入:s = ""输出:0方法一:动态规划定义[i]dp[i] 表示以下标 ii 字符结尾的最长有效括号的长度。我们将 dp 数组全部初始化为0。显然有效的子串一定以‘)’结尾,因此我们...原创 2021-11-10 22:36:06 · 166 阅读 · 0 评论 -
#31:下一个排列
实现获取 下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3]输出:[1,3,2]前言本题要求我们实现一个算法,将给定数字序列重新排列成字典序中下一个更大的排列。以数字序列[1,2,3]为例,其排列按照字典序依次为:[1,2,3]...原创 2021-11-10 20:44:19 · 63 阅读 · 0 评论 -
*#30:串联所有单词的子串
给定一个字符串s和一些 长度相同 的单词words 。找出 s 中恰好可以由words 中所有单词串联形成的子串的起始位置。注意子串要与words 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑words中单词串联的顺序。示例 1:输入:s = "barfoothefoobarman", words = ["foo","bar"]输出:[0,9]解释:从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。输出的顺序不重要, [9,...原创 2021-11-10 19:53:22 · 59 阅读 · 0 评论 -
*#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..) = truncat...原创 2021-11-09 22:26:57 · 190 阅读 · 0 评论 -
#28:实现strStr()
实现strStr()函数。给你两个字符串haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回-1 。说明:当needle是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当needle是空字符串时我们应当返回 0 。这与 C 语言的strstr()以及 Java 的indexOf()定义相符。示例 1:输入:haystack ...原创 2021-11-09 21:39:21 · 57 阅读 · 0 评论 -
#27:移除元素
给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任...原创 2021-11-09 16:13:09 · 66 阅读 · 0 评论 -
*#25:K 个一组翻转链表
给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]方法一:模拟本题的目标非常清晰易懂,不涉及复杂的算法,但是实现过程中需要考虑的细节比较多,容易写出冗长的代码。主要考查面试者设计的能力。需要把链表节点按照 k...原创 2021-11-08 16:41:00 · 57 阅读 · 0 评论 -
*#24:两两交换链表中的节点
方法一:递归可以通过递归的方式实现两两交换链表中的节点。递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换。如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。在对链表中的其余节点递归地两两交换之后,更新节点之间的指针关系,即可完成整个链表的两两交换。用 head 表示原始链...原创 2021-11-07 22:04:34 · 95 阅读 · 0 评论 -
*#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方法一:顺序合并...原创 2021-11-07 16:46:51 · 66 阅读 · 0 评论 -
*#22:括号生成
数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]方法一:暴力法可以生成所有 2^(2n)个 '(' 和 ')' 字符构成的序列,然后我们检查每一个是否有效即可。为了生成所有序列,我们可以使用递归。长度为 n 的序列就是在长度为 n-1 的...原创 2021-11-07 12:06:24 · 85 阅读 · 0 评论 -
#21:合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]方法一:递归两个链表头部值较小的一个节点与剩下元素的 merge 操作结果合并。算法我们直接将以上递归过程建模,同时需要考虑边界情况。如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表...原创 2021-11-05 22:41:45 · 279 阅读 · 0 评论 -
#20:有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。方法一:栈判断括号的有效性可以使用「栈」这一数据结构来解决。遍历给定的字符串s。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。由于后遇到的左括号要先闭合,因此我们可以将这个左括号放入栈顶。当遇到一个右括号时,我们需要将...原创 2021-11-05 20:18:09 · 53 阅读 · 0 评论 -
#19:删除链表的倒数第N个结点
给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]方法一:计算链表长度class Solution{ public ListNode removeNthFromEnd(ListNode head,int n){ ListNode dummy=new ListNode(0,head); int length=get...原创 2021-11-04 22:07:57 · 84 阅读 · 0 评论 -
#18:四数之和
给一个由 n 个整数组成的数组nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组[nums[a], nums[b], nums[c], nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d< na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0...原创 2021-11-04 21:23:00 · 70 阅读 · 0 评论 -
#17:电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]方法一:回溯class Solution{ public List<String> letterCombinations(String digits)...原创 2021-11-03 21:52:29 · 71 阅读 · 0 评论 -
#16:最接近的三数之和
给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。...原创 2021-11-03 19:32:21 · 43 阅读 · 0 评论 -
#16:最接近的三数之和
给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。方法一:排序+双指针class Solution{ public int threeSumClosest(int[] nums,i...原创 2021-11-02 18:15:33 · 58 阅读 · 0 评论 -
#15:三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]class Solution{ public List<...原创 2021-11-01 22:25:02 · 47 阅读 · 0 评论 -
#14:最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例 1:输入:strs = ["flower","flow","flight"]输出:"fl"示例 2:输入:strs = ["dog","racecar","car"]输出:""解释:输入不存在公共前缀。方法一:横向扫描class Solution{ public String longestCommonPrefix(String[] strs){ if.原创 2021-11-01 20:16:45 · 51 阅读 · 0 评论 -
#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, 即为XX+V+II。通常...原创 2021-11-01 17:08:50 · 61 阅读 · 0 评论 -
#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。通常...原创 2021-11-01 15:33:32 · 82 阅读 · 0 评论 -
#11:盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0) 。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。方法一:双指针public class Solution{ public int maxArea(int[] height){ int l=0,r=height.length-1; ...原创 2021-10-31 20:49:56 · 56 阅读 · 0 评论 -
#10:正则表达式匹配
给一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。方法一:动态规划class Solution{ public boolean isMatch(String s,String p){ ...原创 2021-10-31 20:17:05 · 82 阅读 · 0 评论 -
#9:回文数
给一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。方法一:反转一半数字class Solution{ public boolean isPalindrome(int x){ //特殊情况: //如上所述,当x<0时,x不是回文数 //同样的,如果数字的最后一位是0,为了使该数字为...原创 2021-10-31 16:10:38 · 87 阅读 · 0 评论 -
*#8:字符串转换整数(atoi)
请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部...原创 2021-10-30 22:21:28 · 103 阅读 · 0 评论 -
#7:整数反转
给一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围[−231,231− 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。方法一:数学class Solution { public int reverse(int x) { int rev = 0; while (x != 0) { if (rev < Inte...原创 2021-10-30 21:58:57 · 71 阅读 · 0 评论 -
*#6:Z字形变换
将一个给定字符串s根据给定的行数numRows ,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "PAYPALISHIRING"行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,输出需要从左往右逐行读取,产生出一个新的字符串如:"PAHNAPLSIIGYIR"。请实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输...原创 2021-10-30 21:05:32 · 297 阅读 · 0 评论 -
#5:最长回文子串
给你一个字符串s,找到s中最长的回文子串。方法一:动态规划public class Solution{ public String longesPalindrome(String s){ int len=s.length(); if(len<2){ return s; } int maxLen=1; int begin=0; //dp[i][j]表...原创 2021-10-29 22:13:33 · 48 阅读 · 0 评论