LeetCode
StriveQueen
这个作者很懒,什么都没留下…
展开
-
leetcode练习——动态规划(最长上升子序列)
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。官方解法:https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/zui-chang-shang-sheng-zi-xu-lie-by-leetcode-soluti/解法一:动态规划(2.原创 2021-11-08 12:22:23 · 384 阅读 · 0 评论 -
leetcode练习——动态规划(零钱兑换)
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。官方解法:https://leetcode-cn.com/problems/coin-change/solution/322-ling-qian-dui-huan-by-leetcode-solution/解法一:记忆化搜索class Solution: d.原创 2021-11-06 20:41:39 · 386 阅读 · 0 评论 -
leetcode练习——动态规划(不同路径)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?官方解法:https://leetcode-cn.com/problems/unique-paths/solution/bu-tong-lu-jing-by-leetcode-solution-hzjf/解法一:动态规划(40ms/14.9MB)class Solutio.原创 2021-11-04 10:40:43 · 385 阅读 · 0 评论 -
leetcode练习——动态规划(跳跃游戏)
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。官方解法:https://leetcode-cn.com/problems/jump-game/solution/tiao-yue-you-xi-by-leetcode-solution/解法一:力扣链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xv.原创 2021-11-02 12:51:20 · 1715 阅读 · 0 评论 -
leetcode练习——排序与搜索(搜索二维矩阵 II)
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。官方解法:https://leetcode-cn.com/problems/search-a-2d-matrix-ii/solution/sou-suo-er-wei-ju-zhen-ii-by-leetcode-so-9hcx/解法一:直接查找(156ms/21MB)class Solution: def searc.原创 2021-10-28 16:13:01 · 164 阅读 · 0 评论 -
leetcode练习——排序和搜索(搜索旋转排序数组)
整数数组 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] 。给你 旋转后 的数组 nums 和一个整数 t.原创 2021-10-26 13:06:31 · 134 阅读 · 0 评论 -
leetcode练习——排序和搜索(合并区间)
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。官方解法:https://leetcode-cn.com/problems/merge-intervals/solution/he-bing-qu-jian-by-leetcode-solution/解法一:排序(24ms/15.5MB)class Solution: def.原创 2021-10-24 11:57:48 · 118 阅读 · 0 评论 -
leetcode练习——排序和搜索(在排序数组中查找元素的第一个和最后一个位置)
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?官方解法:解法一:利用index返回下标值(40ms/15.4MB)解题思路:index可以根据索引值返回该值在列表中的第一个下标,用count计算target在nums出现的次数,结束值为两者相加减一。class Solution: .原创 2021-10-21 12:35:57 · 220 阅读 · 0 评论 -
leetcode练习——排序和搜索(寻找峰值)
峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。官方解法:https://leetcode-cn.com/problems/find-peak-element/solution/xun-zhao-feng-zhi-by-leetcode-solution-.原创 2021-10-19 21:27:09 · 179 阅读 · 0 评论 -
leetcode练习——排序和搜索(数组中的第K个最大元素)
优秀解析:(1)大根堆–调库 (2)手撸大根堆 (3)快排3种写法基于快排的所有TopK问题简单python模板解法一:快排左右挖坑互填:class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: n = len(nums) l = 0 r = n - 1 while True: idx = self.p.原创 2021-10-13 18:13:15 · 125 阅读 · 0 评论 -
leetcode练习——排序和搜索(前 K 个高频元素)
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。提示:1 <= nums.length <= 105k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的进阶:你所设计算法的时间复杂度 必须 优于 O(n log n) ,其中 n 是数组大小。解法一:https://leetcode-cn.com/problems/top-k-frequent-.原创 2021-10-10 11:49:39 · 243 阅读 · 0 评论 -
leetcode练习——排序和搜索(颜色分类)
给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。进阶:你可以不使用代码库中的排序函数来解决这道题吗?你能想出一个仅使用常数空间的一趟扫描算法吗?官方解法:https://leetcode-cn.com/problems/sort-colors/solution/yan-se-fen-lei-by-leetcode-solution/解法一:单指.原创 2021-10-08 12:55:00 · 129 阅读 · 0 评论 -
leetcode练习——回溯算法(单词搜索)
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。进阶:你可以使用搜索剪枝的技术来优化解决方案,使其在 board 更大的情况下可以更快解决问题?官方解法:https://leetcode-cn.com/problems/word-search/sol.原创 2021-10-06 12:32:50 · 170 阅读 · 0 评论 -
leetcode练习——回溯算法(子集)
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。精彩解法:https://leetcode-cn.com/problems/subsets/solution/hui-su-suan-fa-by-powcai-5/解法一:库函数(36ms/14.9MB)itertools.combinations()itertools.combinations(iterable[, r]创建一个迭代器,.原创 2021-10-05 12:06:35 · 160 阅读 · 0 评论 -
leetcode练习——回溯算法(全排列)
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。很好的详细解法:https://leetcode-cn.com/problems/permutations/solution/hui-su-suan-fa-python-dai-ma-java-dai-ma-by-liweiw/解法一:回溯(32ms/15.2MB)https://leetcode-cn.com/problems/permutations/solution/quan-pai-lie-.原创 2021-10-04 14:59:16 · 211 阅读 · 0 评论 -
leetcode练习——回溯算法(括号生成)
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。官方解法:https://leetcode-cn.com/problems/generate-parentheses/solution/gua-hao-sheng-cheng-by-leetcode-solution/解法一:暴力法(88ms/15.4MB)class Solution: def generateParenthesis(self,.原创 2021-10-03 12:04:41 · 170 阅读 · 0 评论 -
leetcode练习——回溯算法(电话号码的字母组合)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。官方解法:解法一:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xv8ka1/...原创 2021-10-01 21:51:36 · 155 阅读 · 0 评论 -
leetcode练习——数学(分数到小数)
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于 10^4 。解法一:字典(36ms/15.2MB)https://leetcode-cn.com/problems/fraction-to-recurring-decimal/solution/python3-zi-dian-166-by-lio.原创 2021-09-30 12:49:09 · 130 阅读 · 0 评论 -
leetcode练习——数学(两数相除)
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2官方解法:解法一:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-quest.原创 2021-09-29 15:43:18 · 152 阅读 · 0 评论 -
leetcode练习——数学(x 的平方根)
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。官方解法:https://leetcode-cn.com/problems/sqrtx/solution/x-de-ping-fang-gen-by-leetcode-solution/解法一:袖珍计算器算法(32ms/14.7MB)class Solution: .原创 2021-09-28 13:31:12 · 968 阅读 · 0 评论 -
leetcode练习——数学(Pow(x, n))
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。官方解法:https://leetcode-cn.com/problems/powx-n/solution/powx-n-by-leetcode-solution/解法一:快速幂 + 递归(36ms/15.1MB)class Solution: def myPow(self, x: float, n: int) -> float: def quickMul(N): if N.原创 2021-09-27 11:17:55 · 108 阅读 · 0 评论 -
LeetCode练习——数学(Excel表列序号)
给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回该列名称对应的列序号。官方解法:进制转换(48ms/15.1MB)https://leetcode-cn.com/problems/excel-sheet-column-number/solution/excelbiao-lie-xu-hao-by-leetcode-solutio-r29l/class Solution: def titleToNumber(self, columnTitle: str) -.原创 2021-09-26 12:46:24 · 104 阅读 · 0 评论 -
LeetCode练习——数学(阶乘后的零)
给定一个整数 n ,返回 n! 结果中尾随零的数量。进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?官方解法:解法一:力扣链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xwehi5/...原创 2021-09-25 11:40:51 · 126 阅读 · 0 评论 -
LeetCode练习——数学(快乐数)
编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。官方解法:https://leetcode-cn.com/problems/happy-number/solution/kuai-le-shu-by-leetcode-solution/.原创 2021-09-24 12:25:23 · 125 阅读 · 0 评论 -
LeetCode练习——其他(两整数之和)
给你两个整数 a 和 b ,不使用 运算符 + 和 - ,计算并返回两整数之和。示例 1:输入:a = 1, b = 2输出:3示例 2:输入:a = 2, b = 3输出:5官方解法:解法一:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xwaiag/...原创 2021-09-22 16:37:00 · 173 阅读 · 0 评论 -
LeetCode练习——树和图(岛屿数量)
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。官方解法:解法一:力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xvtsnm/...原创 2021-09-21 11:42:45 · 101 阅读 · 0 评论 -
LeetCode练习——树和图(二叉搜索树中第K小的元素)
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别.原创 2021-09-20 13:33:06 · 213 阅读 · 0 评论 -
LeetCode练习——树和图(填充每个节点的下一个右侧节点指针)
给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。官方解法:https://leetcode-cn.com/problems/populating-nex.原创 2021-09-19 13:15:22 · 93 阅读 · 0 评论 -
LeetCode练习——树和图(从前序与中序遍历序列构造二叉树)
给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。官方解法:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/solution/cong-qian-xu-yu-zhong-xu-bian-li-xu-lie-gou-zao-9/解法一:递归(36ms/19.3MB)class Solution: def bui.原创 2021-09-18 21:35:43 · 102 阅读 · 0 评论 -
LeetCode练习——树和图(二叉树的锯齿形层次遍历)
给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。解法一:BFS 广度优先搜索(32ms/15.2MB)# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonec.原创 2021-09-17 19:12:39 · 109 阅读 · 0 评论 -
LeetCode练习——树和图(二叉树的中序遍历)
给定一个二叉树的根节点 root ,返回它的 中序 遍历。官方解法:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/solution/er-cha-shu-de-zhong-xu-bian-li-by-leetcode-solutio/解法一:颜色标记法 (28ms/14.9MB)https://leetcode-cn.com/problems/binary-tree-inorder-traversal/solut.原创 2021-09-15 12:20:24 · 106 阅读 · 0 评论 -
二叉树所有遍历模板及知识点总结(Python3)
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None# 递归# 时间复杂度:O(n),n为节点数,访问每个节点恰好一次。# 空间复杂度:空间复杂度:O(h),h为树的高度。最坏情况下需要空间O(n),平均情况为O(logn).原创 2021-09-14 15:03:32 · 297 阅读 · 0 评论 -
LeetCode练习——链表(相交链表)
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。官方解法:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/xiang-jiao-lian-biao-by-leetcode-sol.原创 2021-09-14 14:06:58 · 147 阅读 · 0 评论 -
LeetCode练习——链表(奇偶链表)
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。官方解法:https://leetcode-cn.com/problems/odd-even-linked-list/solution/qi-ou-lian-biao-by-leetcode-solution/解法一:分离节点后合并(40ms/1.原创 2021-09-13 15:55:23 · 134 阅读 · 0 评论 -
LeetCode练习——链表(两数相加)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。解法一:(68ms/15MB)取出两个链表的数值;两个链表的值相加求和;创建新链表。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0,.原创 2021-09-12 19:34:40 · 198 阅读 · 0 评论 -
LeetCode练习——数组和字符串(递增的三元子序列)
给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。解法一:https://leetcode-cn.com/problems/increasing-triplet-subsequence/solution/pou-xi-ben-zhi-yi-wen-bang-ni-k.原创 2021-09-10 15:28:12 · 188 阅读 · 0 评论 -
LeetCode练习——数组和字符串(最长回文子串)
给你一个字符串 s,找到 s 中最长的回文子串。官方解法:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/解法一:动态规划(7328 ms/22.7MB)class Solution: def longestPalindrome(self, s: str) -> str: .原创 2021-09-09 15:51:34 · 124 阅读 · 0 评论 -
LeetCode练习——数组和字符串(无重复字符的最长子串)
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。官方解法:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-by-leetc-2/解法一:滑动窗口class Solution: def lengthOfLongestSubstring(self, s: str).原创 2021-09-09 14:58:15 · 165 阅读 · 0 评论 -
LeetCode练习——数组和字符串(字母异位词分组)
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。官方解法:https://leetcode-cn.com/problems/group-anagrams/solution/zi-mu-yi-wei-ci-fen-zu-by-leetcode-solut-gyoc/解法一:排序(48ms/17.9MB)由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之.原创 2021-09-07 19:08:59 · 375 阅读 · 0 评论 -
LeetCode练习——数组和字符串(矩阵置零)
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出一个仅使用常量空间的解决方案吗?官方解法:https://leetcode-cn.com/problems/set-matrix-zeroes/solution/ju-zhen-zhi-ling-by-le.原创 2021-09-06 16:24:24 · 135 阅读 · 0 评论