Python刷Leetcode
这个是我使用Python语言刷Leetcode的专栏
Jack_Kuo
https://github.com/JackKuo666
展开
-
【Leetcode刷题】:Python:4. 寻找两个正序数组的中位数
题目4. 寻找两个正序数组的中位数代码py:class Solution: def findMedianSortedArrays(self, nums1, nums2): """ :type nums1: List[int] :type nums2: List[int] :rtype: float """ idx = idx1 = idx2 = 0 m1 = m2 = 0原创 2022-02-08 14:59:39 · 139 阅读 · 0 评论 -
【Leetcode刷题】:Python:739. 每日温度
题目739. 每日温度代码:单调栈class Solution: def dailyTemperatures(self, T: List[int]) -> List[int]: res = [0] * len(T) stack = [] for i in range(len(T)): while stack and T[i] > T[stack[-1]]: # pop the原创 2022-01-28 14:00:40 · 204 阅读 · 0 评论 -
【Leetcode刷题】:Python:647. 回文子串
题目647. 回文子串代码:中心扩散:O(n**2)class Solution: def countSubstrings(self, s: str) -> int: n = len(s) self.ans = 0 def spread(l, r): while l >= 0 and r <= n-1 and s[l] == s[r]: l -= 1原创 2022-01-28 13:40:47 · 142 阅读 · 0 评论 -
【Leetcode刷题】:Python:621. 任务调度器
题目621. 任务调度器代码class Solution: def leastInterval(self, tasks: List[str], n: int) -> int: l = len(tasks) if l <= 1: return l dic = {} for i in tasks: dic[i] = dic.get(i, 0) + 1 tas原创 2022-01-28 13:16:23 · 229 阅读 · 0 评论 -
【Leetcode刷题】:Python:617. 合并二叉树
题目617. 合并二叉树代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def mergeTrees(self, root1:原创 2022-01-28 11:26:48 · 157 阅读 · 0 评论 -
【Leetcode刷题】:Python:581. 最短无序连续子数组
题目581. 最短无序连续子数组代码:双指针:O(n)class Solution: def findUnsortedSubarray(self, nums: List[int]) -> int: n = len(nums) maxn, right = float("-inf"), -1 minn, left = float("inf"), -1 # 右端点:从左向右找最后一个比左边最小值小的数 for i原创 2022-01-28 11:20:56 · 142 阅读 · 0 评论 -
【Leetcode刷题】:Python:560. 和为 K 的子数组
题目560. 和为 K 的子数组代码:前缀和+哈希表优化:O(n)class Solution: def subarraySum(self, nums: List[int], k: int) -> int: counter = {} pre, ans = 0, 0 for num in nums: pre += num if pre == k: ans +=原创 2022-01-28 10:34:13 · 242 阅读 · 0 评论 -
【Leetcode刷题】:Python:543. 二叉树的直径
题目543. 二叉树的直径代码:dfs# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def diameterOfBinaryTr原创 2022-01-28 09:47:25 · 147 阅读 · 0 评论 -
【Leetcode刷题】:Python:538. 把二叉搜索树转换为累加树
题目538. 把二叉搜索树转换为累加树代码:反序中序遍历# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def convertBS原创 2022-01-28 09:20:02 · 168 阅读 · 0 评论 -
【Leetcode刷题】:Python:494. 目标和
题目494. 目标和代码:dpclass Solution: def findTargetSumWays(self, nums: List[int], target: int) -> int: # 加法总和:x # 减法总和:total - x # target = x - (total - x) # x = (target+total) / 2 # 求装满容量为x的背包,有多少种方法 # 如原创 2022-01-27 08:42:11 · 309 阅读 · 0 评论 -
【Leetcode刷题】:Python:461. 汉明距离
题目461. 汉明距离代码:异或+binclass Solution: def hammingDistance(self, x: int, y: int) -> int: # 异或 ans = x ^ y return bin(ans).count("1")原创 2022-01-26 12:50:11 · 146 阅读 · 0 评论 -
【Leetcode刷题】:Python:448. 找到所有数组中消失的数字
题目448. 找到所有数组中消失的数字代码:原数组操作class Solution: def findDisappearedNumbers(self, nums: List[int]) -> List[int]: # 原数组操作 n = len(nums) for i in nums: x = (i-1)%n nums[x] += n res = [] for原创 2022-01-26 11:39:44 · 171 阅读 · 0 评论 -
【Leetcode刷题】:Python:438. 找到字符串中所有字母异位词
题目438. 找到字符串中所有字母异位词代码class Solution: def findAnagrams(self, s: str, p: str) -> List[int]: n, m, res = len(s), len(p), [] if n < m: return res p_cnt = [0 for i in range(26)] s_cnt = [0 for i in rang原创 2022-01-26 11:25:10 · 242 阅读 · 0 评论 -
【Leetcode刷题】:Python:437. 路径总和 III
题目437. 路径总和 III代码:dfs# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def pathSum(self, ro原创 2022-01-26 11:02:02 · 158 阅读 · 0 评论 -
【Leetcode刷题】:Python:416. 分割等和子集
题目416. 分割等和子集代码:dpclass Solution: def canPartition(self, nums: List[int]) -> bool: n = len(nums) if n < 2: return False total = sum(nums) if total%2 == 1: return False原创 2022-01-26 10:12:54 · 201 阅读 · 0 评论 -
【Leetcode刷题】:Python:406. 根据身高重建队列
题目406. 根据身高重建队列代码:class Solution: def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]: # 1.双排序:按照身高降序,相同身高按k升序 people.sort(key=lambda x: (-x[0], x[1])) ans = [] # 2.插入:按照前面大于自己的人数插入 for p原创 2022-01-25 16:47:23 · 267 阅读 · 0 评论 -
【Leetcode刷题】:Python:399. 除法求值
题目399. 除法求值代码:1.dfsclass Solution: def calcEquation(self, equations: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]: graph = collections.defaultdict(dict) for (a, b), v in zip(equations, values):原创 2022-01-25 09:33:28 · 219 阅读 · 0 评论 -
【Leetcode刷题】:Python:394. 字符串解码
题目394. 字符串解码代码:栈:O(n)class Solution: def decodeString(self, s: str) -> str: stack = [] for c in s: # 1.非 ] 入栈 if c != "]": stack.append(c) else: # 2.遇到 ] 出站 tmp =原创 2022-01-24 14:19:26 · 205 阅读 · 0 评论 -
【Leetcode刷题】:Python:347. 前 K 个高频元素
题目347. 前 K 个高频元素代码:hash+堆排序class Solution: def topKFrequent(self, nums: List[int], k: int) -> List[int]: # 构造hash dic = {} for i in nums: dic[i] = dic.get(i, 0)+1 self.res = [] for i in dic:原创 2022-01-24 13:23:11 · 270 阅读 · 0 评论 -
【Leetcode刷题】:Python:338. 比特位计数
题目338. 比特位计数代码:dp:O(n)class Solution: def countBits(self, n: int) -> List[int]: dp = [0 for _ in range(n+1)] for i in range(1, n+1): if i%2 == 1: # 1.奇数:比前一个偶数多一个1 dp[i] = dp[i-1]+1原创 2022-01-24 12:48:53 · 143 阅读 · 0 评论 -
【Leetcode刷题】:Python:337. 打家劫舍 III
题目337. 打家劫舍 III代码:递归:O(n)# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def rob(self, ro原创 2022-01-21 10:06:47 · 139 阅读 · 0 评论 -
【Leetcode刷题】:Python:322. 零钱兑换
题目322. 零钱兑换代码:dp:O(amont*len(coins))class Solution: def coinChange(self, coins: List[int], amount: int) -> int: # dp[i]: 组成金额i所需的最少硬币数 dp = [float("inf") for _ in range(amount+1)] dp[0] = 0 for i in range(1, amou原创 2022-01-21 09:36:53 · 378 阅读 · 0 评论 -
【Leetcode刷题】:Python:312. 戳气球
题目312. 戳气球代码:dp:O(n**3)class Solution: def maxCoins(self, nums: List[int]) -> int: nums = [1] + nums +[1] n = len(nums) dp = [[0 for i in range(n)] for j in range(n)] for size in range(3, n+1): # 窗口大小 f原创 2022-01-20 13:48:03 · 270 阅读 · 0 评论 -
【Leetcode刷题】:Python:309. 最佳买卖股票时机含冷冻期
题目309. 最佳买卖股票时机含冷冻期代码:动态规划:O(n)class Solution: def maxProfit(self, prices: List[int]) -> int: if not prices: return 0 n = len(prices) f = [[0, 0, 0] for _ in range(n)] # 第一天持有,只有可能是买入 f[0][0]原创 2022-01-20 12:30:01 · 193 阅读 · 0 评论 -
【Leetcode刷题】:Python:301. 删除无效的括号
题目301. 删除无效的括号代码:回溯+剪枝:O(n*2**n)class Solution: def removeInvalidParentheses(self, s: str) -> List[str]: res = [] lremove, rremove = 0, 0 for c in s: if c == "(": lremove += 1 elif c原创 2022-01-20 11:07:47 · 258 阅读 · 0 评论 -
【Leetcode刷题】:Python:300. 最长递增子序列
题目300. 最长递增子序列代码:1.动态规划:O(N**2)class Solution: def lengthOfLIS(self, nums: List[int]) -> int: dp = [1 for _ in range(len(nums))] for i in range(len(nums)): for j in range(i): if nums[j] < nums[i]:原创 2022-01-20 10:21:01 · 123 阅读 · 0 评论 -
【Leetcode刷题】:Python:297. 二叉树的序列化与反序列化
题目297. 二叉树的序列化与反序列化代码:DFS+eval()# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Codec: def serialize(self, root):原创 2022-01-19 15:22:19 · 203 阅读 · 0 评论 -
【Leetcode刷题】:Python:287. 寻找重复数
题目287. 寻找重复数代码:快慢指针:O(n)class Solution: def findDuplicate(self, nums: List[int]) -> int: fast = nums[nums[0]] slow = nums[0] while fast != slow: fast = nums[nums[fast]] slow = nums[slow] slo原创 2022-01-19 13:55:05 · 168 阅读 · 0 评论 -
【Leetcode刷题】:Python:283. 移动零
题目283. 移动零代码1.双指针:O(n) : [巧妙]class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ left = right = 0 while right < len(nums):原创 2022-01-19 09:43:05 · 118 阅读 · 0 评论 -
【Leetcode刷题】:Python:279. 完全平方数
题目279. 完全平方数代码:BFS+剪枝class Solution: def numSquares(self, n: int) -> int: squares = [i**2 for i in range(int(n**0.5)+1)] visited = set() # 剪枝 queue = [n] count = 0 # 层数 while queue: tmp = []原创 2022-01-19 09:12:13 · 144 阅读 · 0 评论 -
【Leetcode刷题】:Python:240. 搜索二维矩阵 II
题目240. 搜索二维矩阵 II代码:双指针:O(m+n)class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: i, j = 0, len(matrix[0])-1 while i < len(matrix) and j >= 0: if matrix[i][j] == target:原创 2022-01-18 16:48:58 · 161 阅读 · 0 评论 -
【Leetcode刷题】:Python:239. 滑动窗口最大值
题目239. 滑动窗口最大值代码:双端队列:O(N)class Solution: def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]: res = [] queue = [] i = 0 while i < len(nums): if queue and i-k+1 > queue[0]:原创 2022-01-18 16:44:11 · 137 阅读 · 0 评论 -
【Leetcode刷题】:Python:238. 除自身以外数组的乘积
题目238. 除自身以外数组的乘积代码:1.双数组:空间:O(N)class Solution: def productExceptSelf(self, nums: List[int]) -> List[int]: left = [1 for i in range(len(nums))] right = [1 for i in range(len(nums))] ans = [1 for i in range(len(nums))]原创 2022-01-18 16:18:01 · 176 阅读 · 0 评论 -
【Leetcode刷题】:Python:236. 二叉树的最近公共祖先
题目236. 二叉树的最近公共祖先代码:递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution: def lowestCommonAncestor(self, root: 'TreeNode',原创 2022-01-18 15:40:58 · 124 阅读 · 0 评论 -
【Leetcode刷题】:Python:234. 回文链表
题目234. 回文链表代码:后半部分翻转,判断之后再翻转回来# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def isPalindrome(self, head: ListNode) -> bool:原创 2022-01-18 15:29:53 · 211 阅读 · 0 评论 -
【Leetcode刷题】:Python:226. 翻转二叉树
题目226. 翻转二叉树代码:递归# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# self.right = rightclass Solution: def invertTree(self, roo原创 2022-01-18 13:01:28 · 105 阅读 · 0 评论 -
【Leetcode刷题】:Python:221. 最大正方形
题目221. 最大正方形代码:dp:O(m*n)class Solution: def maximalSquare(self, matrix: List[List[str]]) -> int: if len(matrix) == 0 or len(matrix[0]) == 0: return 0 maxSide = 0 dp = [[0 for i in range(len(matrix[0]))] for原创 2022-01-18 12:53:37 · 159 阅读 · 0 评论 -
【Leetcode刷题】:Python:215. 数组中的第K个最大元素
题目215. 数组中的第K个最大元素代码:大顶堆:O(nlogn)class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: self.nums = nums # 构建大顶堆 for i in range(len(self.nums)//2, -1, -1): self.maxHeap(i, len(self.nums))原创 2022-01-18 09:55:04 · 137 阅读 · 0 评论 -
【Leetcode刷题】:Python:208. 实现 Trie (前缀树)
题目208. 实现 Trie (前缀树)代码:1.双数组class Trie: def __init__(self): self.N = 100009 self.trie = [[0 for i in range(self.N)] for j in range(26)] self.count = [0 for i in range(self.N)] self.index = 0 def insert(self, wo原创 2022-01-18 09:24:44 · 234 阅读 · 0 评论 -
【Leetcode刷题】:Python:207. 课程表
题目 207. 课程表代码:BFS+DAG(有向无环图):1.构图2.判断是否是有向无环图class Solution: def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool: # 入度表 indegrees = [0 for _ in range(numCourses)] # 邻接表 adjacency = collec原创 2022-01-17 16:32:20 · 234 阅读 · 0 评论