
LeetCode II
Aiclin
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
115. 字符串 s 的子序列中出现字符串 t 的次数(Hard)/ KMP算法 / 792. 匹配子序列的单词数(M)
a原创 2023-02-15 15:34:44 · 208 阅读 · 0 评论 -
1293. (消除k个障碍物)网格中的最短路径(Hard)/ 174. 地下城游戏(计算骑士所需的最低生命值,Hard)/ 1368. 使网格图至少有一条有效路径的最小代价(H)/ 迷宫系列!!!
a原创 2023-02-15 12:44:16 · 248 阅读 · 0 评论 -
204. 数字 N 的所有质数(不含 N)(Medium)/ 786. 第 K 小的质数分数(Medium)
【代码】204. 计数质数。原创 2023-01-16 17:14:01 · 106 阅读 · 0 评论 -
1552. 两球之间的磁力(Medium)/ 1648. 销售价值减少的颜色球(M)/ 二分问题!!!
668. 乘法表中第k小的数(Hard)378. 有序矩阵中第 K 小的元素(Medium)题解class Solution: def maxDistance(self, position: List[int], m: int) -> int: # 判断当前的mid是否合法:存放的下m个球 def check(x: int) -> bool: pre = position[0] cnt = 1.原创 2021-09-23 13:32:52 · 187 阅读 · 0 评论 -
994. 腐烂的橘子(Medium)/ 582. 杀死进程(M)/ 二维矩阵DFS、BFS、并查集问题
73. 矩阵置零(Medium)130. 被围绕的区域(Medium)934. 最短的桥(Medium)547. 省份数量、朋友圈(Medium)684. 冗余连接(Medium)题解class Solution: # BFS def orangesRotting(self, grid: List[List[int]]) -> int: row, col, time = len(grid), len(grid[0]), 0 directi.原创 2021-09-23 11:27:13 · 277 阅读 · 0 评论 -
763. (尽可能多地)划分字母区间(Medium)
49. 字母异位词分组(Medium)438. 找到字符串中所有字母异位词(Medium)题解class Solution: # 贪心 def partitionLabels(self, s: str) -> List[int]: # 得到每个字母最后一次出现的下标位置 last = [0] * 26 for i, ch in enumerate(s): last[ord(ch) - ord("a").原创 2021-09-23 10:29:00 · 153 阅读 · 0 评论 -
384. 打乱数组【逻辑实现题:重置、随机】(Medium)
题解class Solution: def __init__(self, nums: List[int]): self.array = nums self.original = list(nums) # 保存原始数组 def reset(self) -> List[int]: """ Resets the array to its original configuration and return it...原创 2021-09-10 13:53:05 · 174 阅读 · 0 评论 -
931.【正方形】下降路径最小和(Medium)/ 120.【三角形】最小路径和(Medium)
LeetCode 112. 路径总和(Easy)/ 113. 路径总和 II(Medium)/ 437. 路径总和 III(Medium) / 二叉树路径问题题解官方题解class Solution: def minFallingPathSum(self, matrix: List[List[int]]) -> int: n = len(matrix) # dp[j]表示从第j列下降(到某一行)得到的最小路径值 dp = [i for.原创 2021-09-10 00:25:03 · 263 阅读 · 0 评论 -
842. 将数组拆分成斐波那契序列(Medium)
题解class Solution: def splitIntoFibonacci(self, num): ans = [] def backtrack(idx): # 若已经到达原始字符串的长度,则表示已经拆分完 if idx == len(num): return len(ans) >= 3 curr = 0 ..原创 2021-09-05 13:11:47 · 249 阅读 · 0 评论 -
395. 每个字符至少重复 K 次的最长子串(Medium)/ 424. 最多替换 K 次后的最长重复子串(Medium)/ 1156.(最多交换1次)最长的单字符重复子串 /(非)重复串问题!!!
最长重复子串剑指Offer 48. 最长不含重复字符的子字符串(Medium)递归前缀和+分治(后序遍历)class Solution: # 递归 def longestSubstring(self, s, k): if len(s) < k: return 0 for c in set(s): if s.count(c) < k: ret原创 2021-09-05 01:14:52 · 226 阅读 · 0 评论 -
面试题 17.07. 婴儿名字(Medium)
547. 省份数量(Medium)684. 冗余连接(Medium)题解class Solution(object): def trulyMostPopular(self, names, synonyms): # 检查是否是同一个父节点,返回父节点 def find(x): if x != name_len[x]: name_len[x] = find(name_len[x]) .原创 2021-09-04 23:38:19 · 174 阅读 · 0 评论 -
202. (每位数平方相加,循环)快乐数(Easy)/ 878.(能被a或b整除的)第 N 个神奇数字(Hard)
题解class Solution: def isHappy(self, n: int) -> bool: # 计算下一个平方和数 def get_next(num): total_sum = 0 while num > 0: # 对num除以10,得到整除部分num、余数部分remainder num, remainder = div..原创 2021-09-03 00:58:45 · 206 阅读 · 0 评论 -
665. (最多改变1个元素,能否构成)非递减数列(Medium)
题解class Solution(object): # 贪心:最多修改一次,则只需比较连续的三个元素 def checkPossibility(self, nums): n = len(nums) cnt = 0 for i in range(1, n): # 若当前值比上一个值小,则需要进行修改 if nums[i] < nums[i - 1]: ..原创 2021-09-03 00:07:33 · 212 阅读 · 0 评论 -
402.【移掉 K 位数字后】最小的数(Medium)/ 316.【去除重复字母后】字典序最小字符串(Medium)/ 321.【从 2 个数组中选出 K 个数】拼接最大数(Hard)
题解class Solution: # 贪心 + 单调递增栈 def removeKdigits(self, num: str, k: int) -> str: # 单调递增栈,栈中的元素代表截止到当前位置, # 删除不超过 k 次个数字后,所能得到的最小整数 stack = [] # 构建单调递增的数字串 for digit in num: # 若左边..原创 2021-09-02 00:29:34 · 203 阅读 · 0 评论 -
689. 三个无重叠子数组的最大和(Hard)/ 1031. 两个【非重叠】子数组的最大和(M)
题解class Solution: def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]: N = len(nums) ss = [sum(nums[:k])] for i in range(k, N) : ss.append(ss[-1] + nums[i] - nums[i-k]) maxl, maxr..原创 2021-08-30 22:32:37 · 156 阅读 · 0 评论 -
1339. (删除1条边)分裂二叉树的最大乘积(Medium)
题解# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def maxProduct(self, root: TreeNode) -> int: total = 0...原创 2021-08-30 18:06:19 · 179 阅读 · 0 评论 -
821. (到给定)字符的最短距离(Easy)
题解(4种方法)class Solution(object): def shortestToChar(self, S, C): prev = float('-inf') # 记录上一个字符 C 出现的位置 ans = [] # 从左向右遍历,记录上一个字符 C 出现的位置 prev,那么答案就是 i - prev for i, x in enumerate(S): if x == C: prev = ..原创 2021-08-28 01:09:37 · 137 阅读 · 0 评论 -
668. 乘法表中第 K 小的数(Hard)
题解class Solution(object): def findKthNumber(self, m, n, k): # x是否足够大可以成为乘法表中的第k小的值 def enough(x): rank = 0 for i in range(1, m+1): # 遍历每一行 # 每遍历一行,能增加的排序数都会减少(因为这里是乘法关系) # 而最多..原创 2021-08-28 00:33:55 · 198 阅读 · 0 评论 -
1092. 最短公共超序列(Hard)
题解class Solution: def shortestCommonSupersequence(self, str1: str, str2: str) -> str: m = len(str1) n = len(str2) #--------------- 先找最长公共子序列LCS -----------------# dp = [["" for _ in range(n + 1)] for _ in range(..原创 2021-08-27 23:31:04 · 597 阅读 · 0 评论 -
130.【把O变成X】被围绕的区域(Medium)/ 463. 岛屿的周长(E)
官方题解DFS + BFS + 并查集class Solution: def solve(self, board: List[List[str]]) -> None: """ Do not return anything, modify board in-place instead. """ if not board: return n, m = len(boa..原创 2021-08-27 00:41:51 · 169 阅读 · 0 评论 -
932. 漂亮数组(Medium)/ 526. 优美的排列 / 667. 优美的排列 II(M)/ 数组问题!!!
题解class Solution: def beautifulArray(self, N: int) -> List[int]: # 哈希表记录数字i的漂亮数组 memo = {1 : [1]} def f(N): # 若不在哈希表中给定数,则进行计算 if N not in memo: # 奇数映射 + 偶数映射 memo..原创 2021-08-27 00:34:29 · 207 阅读 · 0 评论 -
116. 填充每个节点的下一个右侧节点指针 / 117. 填充每个节点的下一个右侧节点指针 II(Medium)
题解"""# Definition for a Node.class Node: def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None): self.val = val self.left = left self.right = right self.next = next"""..原创 2021-08-26 23:08:30 · 112 阅读 · 0 评论 -
797. (有向无环图)所有可能的路径(M)/ 1575. (汽车加油)统计所有可行路径(H)/ 332. 重新安排行程(H)/ 752 打开转盘锁 / 753. 破解保险箱(H)(欧拉回路!!)
题解class Solution: def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]: res = [] path = [0] # 每条路径都从第0个节点开始 def dfs(x: int): # 若已经到达第n-1个节点,则找到一条路径 if x == len(graph) - 1: ..原创 2021-08-26 17:20:57 · 264 阅读 · 0 评论 -
97. 交错字符串(Medium)
题解class Solution: def isInterleave(self, s1: str, s2: str, s3: str) -> bool: l1, l2, l3 = len(s1), len(s2), len(s3) if l1 + l2 != l3: return False # dp[i][j]表示s1[0..i]与s2[0..j]能否构成s3[0..i+j] # dp = ..原创 2021-08-26 16:20:49 · 169 阅读 · 0 评论 -
125.【忽略标点符号】验证回文串(Easy)/ 680.【最多删除 1 个字符】验证回文字符串 Ⅱ(Easy)/ 214.【在前面添加字符构成的】最短回文串(Hard)
题解class Solution: def isPalindrome(self, s: str) -> bool: n = len(s) l, r = 0, n - 1 # 双指针还未相遇时,进行循环 while l < r: # 当s[l]不是字母或数字时,左指针l后移一位 while l < r and not s[l].isalnum():..原创 2021-08-25 23:51:54 · 167 阅读 · 0 评论 -
131. 分割回文串(Medium)/ 132. 分割回文串 II(Hard)/ 1278. 分割回文串 III(Hard)/ 1745. 回文串分割 IV(Hard)
题解class Solution: def partition(self, s: str) -> List[List[str]]: n = len(s) # dp[i][j]表示s[i..j]是否为回文串,空串、单个字符均为回文串 dp = [[True] * n for _ in range(n)] # 从后往前遍历,确定哪些子串为回文串 for i in range(n - 1, -1, -1):..原创 2021-08-25 23:33:20 · 180 阅读 · 0 评论 -
118. 杨辉三角(Easy)/ 119. 杨辉三角 II(Easy)
题目链接119. 杨辉三角 II题解原创 2021-08-10 10:08:44 · 137 阅读 · 0 评论 -
73. 矩阵置零(Medium)
题解链接class Solution: def setZeroes(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ flag_col = False row = len(matrix) col = len(matrix[0]) ..原创 2021-08-10 00:48:39 · 304 阅读 · 0 评论 -
410. 分割成 m 个数组的最大值(Hard)
题解class Solution: def splitArray(self, nums: List[int], m: int) -> int: def check(x: int) -> bool: total, cnt = 0, 1 for num in nums: if total + num > x: cnt += 1 ..原创 2021-08-10 00:44:42 · 194 阅读 · 0 评论 -
498. 对角线遍历(Medium)
题解链接class Solution: def findDiagonalOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix or not matrix[0]: return [] N, M = len(matrix), len(matrix[0]) row, column = 0, 0 direction = 1..原创 2021-08-10 00:40:44 · 135 阅读 · 0 评论 -
867. 转置矩阵(Easy)
题解链接原创 2021-08-10 00:31:58 · 128 阅读 · 0 评论 -
934. 最短的桥(Medium)
题解链接class Solution: # 【DFS+BFS】连通分量搜索+多源最短路径 def shortestBridge(self, A: List[List[int]]) -> int: source = collections.deque() m = len(A) n = len(A[0]) def dfs(i, j): if i < 0 or j < 0 or i &g..原创 2021-08-10 00:29:30 · 140 阅读 · 0 评论 -
127. 单词接龙(Hard)/ 126. 单词接龙 II(Hard)/ 472. 连接词(Hard)
题解链接class Solution: # 双向BFS def findLadders(self, beginWord: str, endWord: str, wordList: List[str]) -> List[List[str]]: wordList = set(wordList) # 转换为hash实现O(1)的in判断 if endWord not in wordList: return [] #..原创 2021-08-10 00:22:52 · 178 阅读 · 0 评论 -
915. 分割数组:left(尽可能短)、right(Medium)
官方题解class Solution: def partitionDisjoint(self, A: List[int]) -> int: left_max = A[0] cur_max = A[0] split = 0 for i in range(1, len(A)): if A[i] >= cur_max: cur_max = A[i] ..原创 2021-07-26 23:21:13 · 167 阅读 · 0 评论 -
面试题 17.24. (总和)最大子矩阵(Hard)
题目链接class Solution: def getMaxMatrix(self, matrix: List[List[int]]) -> List[int]: m, n = len(matrix), len(matrix[0]) ans = [0] * 4 r1, c1, r2, c2 = [0] * 4 max_sum = matrix[0][0] # 全局最大和 for i in range(m)..原创 2021-07-25 00:45:26 · 241 阅读 · 0 评论 -
646. 最长数对链(Medium)
题解链接class Solution(object): def findLongestChain(self, pairs): cur, ans = float('-inf'), 0 for x, y in sorted(pairs, key=lambda x: x[1]): if cur < x: cur = y ans += 1 return an..原创 2021-07-25 00:34:52 · 133 阅读 · 0 评论 -
315. 计算右侧小于当前元素的个数(Hard)
完整题解class Solution: def countSmaller(self, nums: List[int]) -> List[int]: size = len(nums) if size == 0: return [] if size == 1: return [0] temp = [None for _ in range(size)] res ..原创 2021-07-24 01:02:56 · 209 阅读 · 0 评论 -
807. 保持城市天际线(Medium)/ 218. 天际线问题(Hard)
题目链接class Solution: def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int: m, n = len(grid), len(grid[0]) skyline_row = [] skyline_col = [] for i in range(m): skyline_row.append(max(grid[i..原创 2021-07-23 23:59:21 · 189 阅读 · 0 评论 -
1363. 形成三的最大倍数(Hard)
题解原创 2021-07-23 23:54:44 · 184 阅读 · 0 评论 -
面试题 16.03. 交点(Hard)/ 149. 直线上最多的点数(Hard)
完整题解class Solution: def intersection(self, start1: List[int], end1: List[int], start2: List[int], end2: List[int]) -> List[float]: # 判断 (xk, yk) 是否在「线段」(x1, y1)~(x2, y2) 上 # 这里的前提是 (xk, yk) 一定在「直线」(x1, y1)~(x2, y2) 上 def..原创 2021-07-23 23:47:59 · 233 阅读 · 0 评论