LC 31. 下一个排列 题目描述这是 LeetCode 上的 31. 下一个排列 ,难度为 中等。 实现获下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须「原地」修改,只允许使用额外常数空间。 示例 1:123输入:nums = [1,2,3]输出:[1,3,2]示例 2:123输入:nums = [3,2,1]输 2021-01-26 模拟 数学
LC 33. 搜索旋转排序数组 题目描述这是 LeetCode 上的 33. 搜索旋转排序数组 ,难度为 中等。 整数数组 nums 按升序排列,数组中的值互不相同。 在传递给函数之前,nums 在预先未知的某个下标 $k$ ($0 <= k < nums.length$)上进行了旋转。 使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., 2021-01-26 二分
LC 29. 两数相除 题目描述这是 LeetCode 上的 29. 两数相除 ,难度为 中等。 给定两个整数,被除数 dividend 和除数 divisor。 将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335 2021-01-25 二分 数学
LC 28. 实现 strStr() 题目描述这是 LeetCode 上的 28. 实现 strStr() ,难度为 简单。 实现 strStr() 函数。 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 $0$ 开始)。 如果不存在,则返回 $-1$ 。 说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好 2021-01-25 KMP 子串匹配
LC 27. 移除元素 题目描述这是 LeetCode 上的 27. 移除元素 ,难度为 简单。 给你一个数组 nums 和一个值 val,你需要「原地」移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 $O(1)$ 额外空间并「原地」修改输入数组。 元素的顺序可以改变。 你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注 2021-01-25 双指针 数组 数组移除元素问题
LC 26. 删除有序数组中的重复项 题目描述这是 LeetCode 上的 26. 删除有序数组中的重复项 ,难度为 简单。 给你一个有序数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 $O(1)$ 额外空间的条件下完成。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里 2021-01-25 双指针 数组 数组移除元素问题
LC 25. K 个一组翻转链表 题目描述这是 LeetCode 上的 25. K 个一组翻转链表 ,难度为 困难。 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 进阶: 你可以设计一个只使用常数额外空间的算法来解决此问题吗? 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 示 2021-01-24 递归 链表 迭代
LC 24. 两两交换链表中的节点 题目描述这是 LeetCode 上的 24. 两两交换链表中的节点 ,难度为 中等。 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 示例 1: 123输入:head = [1,2,3,4]输出:[2,1,4,3] 示例 2:123输入:head = []输出:[]示例 3:123输入:head = [1]输出:[1] 2021-01-24 递归 链表
LC 23. 合并K个升序链表 题目描述这是 LeetCode 上的 23. 合并K个升序链表 ,难度为 中等。 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1:123456789101112输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1-> 2021-01-24 优先队列(堆) 链表 多路归并
LC 22. 括号生成 题目描述这是 LeetCode 上的 22. 括号生成 ,难度为 中等。 数字 $n$ 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1:123输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()" 2021-01-23 DFS 回溯算法
LC 21. 合并两个有序链表 题目描述这是 LeetCode 上的 21. 合并两个有序链表 ,难度为 简单。 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 123输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4] 示例 2:123输入:l1 = [], l2 = []输出:[]示例 3:123输入:l1 = [], 2021-01-23 链表 多路归并
LC 20. 有效的括号 题目描述这是 LeetCode 上的 20. 有效的括号 ,难度为 简单。 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 示例 1:1 2021-01-23 栈 有效括号
LC 19. 删除链表的倒数第 N 个结点 题目描述这是 LeetCode 上的 19. 删除链表的倒数第 N 个结点 ,难度为 中等。 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1:123输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:123输入:head = [1], n = 1输出:[]示例 3:123输入:head = [1 2021-01-23 双指针 链表 快慢指针
LC 18. 四数之和 题目描述这是 LeetCode 上的 18. 四数之和 ,难度为 中等。 给定一个包含 $n$ 个整数的数组 nums 和一个目标值 t,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 t 相等? 找出所有满足条件且不重复的四元组。 注意:答案中不可以包含重复的四元组。 示例 1:123输入:nums = [1,0,-1,0,-2,2], t = 2021-01-23 双指针 排序 n 数之和
LC 17. 电话号码的字母组合 题目描述这是 LeetCode 上的 17. 电话号码的字母组合 ,难度为 中等。 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 答案可以按「任意顺序」返回。 给出数字到字母的映射如下(与电话按键相同)。注意 $1$ 不对应任何字母。 示例 1: 123输入:digits = "23"输出:["ad","ae",& 2021-01-23 DFS 回溯算法