LeetCode
LeetCode的一些题解,第一遍主用Python,因为较其他语言刷起来快。后面会补上C/C++、Java,其他语言有生之年系列。
Tuenity
快乐学习!
展开
-
【题解】【LeetCode】1. 两数之和
1. 两数之和原题传送:LeetCode 1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路:暴力枚举,如果两数之和匹配到目标值,返原创 2020-08-27 15:57:48 · 177 阅读 · 0 评论 -
【题解】【LeetCode】5. 最长回文子串
原题传送:链接5. 最长回文子串给定一个字符串 s,找到 s中最长的回文子串。你可以假设 s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路1:暴力枚举,外循环为字符串长度从大到小,内循环为起始下标从左到右。Python:class Solution: def longestPalindrome(self, s: str) -> str:原创 2020-08-21 15:50:05 · 253 阅读 · 0 评论 -
【题解】【LeetCode】15. 三数之和
15. 三数之和原题传送:LeetCode 15. 三数之和给你一个包含 n 个整数的数组 nums,判断 nums中是否存在三个元素 a,b,c , 使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意: 答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路:双指针法,先对数组排序,然后遍历。重复元素跳过,避免出现重复原创 2020-08-27 22:26:29 · 198 阅读 · 1 评论 -
【题解】【LeetCode】16. 最接近的三数之和
16. 最接近的三数之和原题传送:LeetCode 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-1原创 2020-08-28 07:50:26 · 273 阅读 · 0 评论 -
【题解】【LeetCode】18. 四数之和
18. 四数之和原题传送:LeetCode 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,原创 2020-08-28 18:54:51 · 226 阅读 · 0 评论 -
【题解】【LeetCode】35. 搜索插入位置
35. 搜索插入位置原题传送:LeetCode 35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0思路:因为数组是升序排列的,所以可以从小到大遍原创 2020-08-24 09:10:33 · 233 阅读 · 0 评论 -
【题解】【LeetCode】49. 字母异位词分组
49. 字母异位词分组原题传送:LeetCode 49. 字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]思路:通过排序把字符串转成从小到大的排列,利用字典进行分组。Python:class Solution: def原创 2020-08-28 19:01:56 · 249 阅读 · 0 评论 -
【题解】【LeetCode】50. Pow(x, n)
原题传送:链接50. Pow(x, n)实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000,102.00000, 102.00000,10输出: 1024.000001024.000001024.00000示例 2:输入: 2.10000,32.10000, 32.10000,3输出: 9.261009.261009.26100示例 3:输入: 2.00000,−22.00000, -22.00000,−2输出: 0.250000.25原创 2020-08-18 23:51:22 · 206 阅读 · 0 评论 -
【题解】【LeetCode】53. 最大子序和
原题传送:链接53. 最大子序和给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 :输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。思路1:Python:思路2:Python:...原创 2020-08-19 19:49:38 · 140 阅读 · 0 评论 -
【题解】【LeetCode】72. 编辑距离
原题传送:链接72. 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:1.插入一个字符2.删除一个字符3.替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')示例原创 2020-08-22 15:28:21 · 277 阅读 · 0 评论 -
【题解】【LeetCode】100. 相同的树
原题传送:链接100. 相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] 输出: true示例 2:输入: ...原创 2020-03-09 23:12:28 · 204 阅读 · 1 评论 -
【题解】【LeetCode】149. 直线上最多的点数
149. 直线上最多的点数原题传送:LeetCode 149. 直线上最多的点数给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。示例 1:输入: [[1,1],[2,2],[3,3]]输出: 3解释:^|| o| o| o +------------->0 1 2 3 4示例 2:输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]输出: 4解释:^|| o| o原创 2020-08-28 19:42:06 · 365 阅读 · 0 评论 -
【题解】【LeetCode】169. 多数元素
原题传送:链接169. 多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2思路1:因为多数元素的出现次数大于一半,所以排序后中位数即为答案。Python:class Solution: def majorityElement(self, nums: Lis原创 2020-08-19 20:56:01 · 346 阅读 · 0 评论 -
【题解】【LeetCode】198. 打家劫舍
原题传送:链接198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 =原创 2020-08-22 16:32:02 · 215 阅读 · 0 评论 -
【题解】【LeetCode】202. 快乐数
202. 快乐数原题传送:LeetCode 202. 快乐数编写一个算法来判断一个数 n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n是快乐数就返回 True;不是,则返回 False。示例 :输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02原创 2020-08-24 09:29:39 · 205 阅读 · 0 评论 -
【题解】【LeetCode】205. 同构字符串
205. 同构字符串原题传送:LeetCode 205. 同构字符串给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。示例 1:输入: s = "egg", t = "add"输出: true示例 2:输入: s = "foo", t = "bar"输出: false示例 3:输入: s = "pape原创 2020-08-24 09:43:31 · 448 阅读 · 0 评论 -
【题解】【LeetCode】213. 打家劫舍 II
原题传送:链接213. 打家劫舍 II你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2原创 2020-08-22 16:35:43 · 225 阅读 · 0 评论 -
【题解】【LeetCode】219. 存在重复元素 II
219. 存在重复元素 II原题传送:LeetCode 219. 存在重复元素 II给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。示例 1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2原创 2020-08-28 20:02:59 · 238 阅读 · 0 评论 -
【题解】【LeetCode】220. 存在重复元素 III
220. 存在重复元素 III原题传送:LeetCode 220. 存在重复元素 III在整数数组 nums 中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。如果存在则返回 true,不存在返回 false。示例 1:输入: nums = [1,2,3,1], k = 3, t = 0输出: true示例 2:输入: nums = [1,0,1,1], k = 1, t = 2输原创 2020-08-28 21:12:28 · 330 阅读 · 1 评论 -
【题解】【LeetCode】242. 有效的字母异位词
242. 有效的字母异位词原题传送:LeetCode 242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?思路:只要满足各字符串的组成原创 2020-08-24 11:09:51 · 331 阅读 · 0 评论 -
【题解】【LeetCode】290. 单词规律
290. 单词规律原题传送:LeetCode 290. 单词规律给定一种规律 pattern和一个字符串 str,判断 str是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern里的每个字母和字符串 str中的每个非空单词之间存在着双向连接的对应规律。示例 1:输入: pattern = "abba", str = "dog cat cat dog"输出: true示例 2:输入:pattern = "abba", str = "dog cat cat fish"输出:原创 2020-08-24 11:26:51 · 274 阅读 · 0 评论 -
【题解】【LeetCode】349. 两个数组的交集
349. 两个数组的交集原题传送:LeetCode 349. 两个数组的交集给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。思路:把列表转成集合求交集。Python:class Solution: def原创 2020-08-24 11:49:00 · 232 阅读 · 0 评论 -
【题解】【LeetCode】350. 两个数组的交集 II
350. 两个数组的交集 II原题传送:LeetCode 350. 两个数组的交集 II给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你原创 2020-08-25 09:52:33 · 409 阅读 · 0 评论 -
【题解】【LeetCode】410. 分割数组的最大值
410. 分割数组的最大值原题传送:LeetCode 410. 分割数组的最大值给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例 :输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7,2,5] 和 [原创 2020-08-25 10:03:26 · 311 阅读 · 0 评论 -
【题解】【LeetCode】447. 回旋镖的数量
447. 回旋镖的数量原题传送:LeetCode 447. 回旋镖的数量给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k),其中 i 和 j 之间的距离和 i 和 k 之间的距离相等 (需要考虑元组的顺序)。找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。示例 :输入:[[0,0],[1,0],[2,0]]输出:2解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2原创 2020-08-28 21:23:24 · 294 阅读 · 0 评论 -
【题解】【LeetCode】451. 根据字符出现频率排序
451. 根据字符出现频率排序原题传送:LeetCode 451. 根据字符出现频率排序给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。示例 2:输入:"cccaaa"输出:"cccaaa"解释:'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。注意"cacaca"是原创 2020-08-25 10:06:41 · 421 阅读 · 0 评论 -
【题解】【LeetCode】454. 四数相加 II
454. 四数相加 II原题传送:LeetCode 454. 四数相加 II给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l),使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0≤N≤5000 ≤ N ≤ 5000≤N≤500 。所有整数的范围在 −228-2^{28}−228 到 228−12^{28} - 1228−1 之间,最终结果不会超过 231−12^{原创 2020-08-28 21:30:33 · 332 阅读 · 0 评论 -
【题解】【LeetCode】516. 最长回文子序列
原题传送:链接516. 最长回文子序列给定一个字符串 s,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s的最大长度为 1000。示例 1:输入: "bbbab"输出: 4一个可能的最长回文子序列为 "bbbb"。示例 2:输入: "cbbd"输出: 2一个可能的最长回文子序列为 "bb"。提示:1 <= s.length <= 1000s只包含小写英文字母思路1:Python:...原创 2020-08-22 14:14:47 · 294 阅读 · 0 评论 -
【题解】【LeetCode】540. 有序数组中的单一元素
540. 有序数组中的单一元素原题传送:LeetCode 540. 有序数组中的单一元素给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: [3,3,7,7,10,11,11]输出: 10注意: 您的方案应该在 O(log n)时间复杂度和 O(1)空间复杂度中运行。思路:二分法题目要求时间复杂度和空间复杂度。参考:二分搜索当mid为偶数时,mid两边的数字原创 2020-08-25 10:17:45 · 384 阅读 · 0 评论 -
【题解】【LeetCode】674. 最长连续递增序列
原题传送:链接674. 最长连续递增序列给定一个未经排序的整数数组,找到最长且连续的递增序列,并返回该序列的长度。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。 示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长度为1。注意: 数组长度不会超过10000。思路:遍历,递增当前长度+1,非原创 2020-08-22 15:14:50 · 516 阅读 · 0 评论