leetcode
喝牛奶的草履虫
这个作者很懒,什么都没留下…
展开
-
leetcode 1791. 找出星型图的中心节点
用一个字典统计每个节点的度,中心节点为度为n-1的节点原创 2022-07-08 20:20:24 · 289 阅读 · 1 评论 -
leetcode 70. 爬楼梯
数组储存class Solution: def climbStairs(self, n: int) -> int: dp = [1, 2] for i in range(2, n): dp.append(dp[i-1] + dp[i-2]) return dp[n-1]变量储存(滚动数组)class Solution: def climbStairs(self, n: int) -> int: i原创 2022-02-20 23:14:57 · 95 阅读 · 0 评论 -
leetcode 111. 二叉树的最小深度
广搜,遍历到的第一个叶子节点即为最小深度# 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 minDepth(self, root原创 2022-02-17 23:49:38 · 223 阅读 · 0 评论 -
leetcode 129. 求根节点到叶节点数字之和
深搜遍历每个节点,记录数字即可# 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 sumNumbers(self, root: T原创 2022-02-16 11:29:15 · 169 阅读 · 0 评论 -
leetcode 103. 二叉树的锯齿形层序遍历
用一个变量来标记是否反转class Solution: def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]: if not root: return [] queue = [root] ans = [] flag = True while queue: temp = []原创 2022-02-09 22:27:10 · 99 阅读 · 0 评论 -
leetcode 589. N 叉树的前序遍历
递归 前序遍历class Solution: def preorder(self, root: 'Node') -> List[int]: ans = [] def dfs(root): if not root: return ans.append(root.val) for node in root.children: d原创 2022-02-09 22:01:35 · 350 阅读 · 0 评论 -
leetcode 1267. 统计参与通信的服务器
对每一行求和,如果等于一的话遍历该行为1的列,如果找到另一台的话结果加1;如果和不等于1(0或者大于1),则将结果加上和(该行可以通信的台数)。class Solution: def countServers(self, grid: List[List[int]]) -> int: ans = 0 for i in range(len(grid)): s = sum(grid[i]) if s == 1:原创 2022-01-19 20:51:13 · 232 阅读 · 0 评论 -
leetcode 1880. 检查某单词是否等于两单词之和
class Solution: def isSumEqual(self, firstWord: str, secondWord: str, targetWord: str) -> bool: def f(word): res = 0 for i in word: res *= 10 res += ord(i) - ord('a') return原创 2022-01-19 20:17:43 · 118 阅读 · 0 评论 -
leetcode 面试题 16.10. 生存人数
class Solution: def maxAliveYear(self, birth: List[int], death: List[int]) -> int: # 统计每一年出生与死亡的人数 b = Counter(birth) d = Counter(death) # 初始化活着的人数n、最大存活数maxn、最大存活数对应年份 n, maxn, year = 0, 0, 0 # 迭代所有年份原创 2022-01-18 21:04:27 · 4199 阅读 · 0 评论 -
leetcode 27. 移除元素
一个指针遍历数组,遇到指定数字删掉class Solution: def removeElement(self, nums: List[int], val: int) -> int: i = 0 while i < len(nums): if nums[i] == val: nums.pop(i) i -= 1 i += 1 r原创 2022-01-18 19:58:29 · 195 阅读 · 0 评论 -
leetcode 35. 搜索插入位置
二分class Solution: def searchInsert(self, nums: List[int], target: int) -> int: l, r = 0, len(nums)-1 while l <= r: mid = l + (r-l)//2 if nums[mid] < target: l = mid + 1 else:原创 2022-01-17 21:13:12 · 287 阅读 · 0 评论 -
leetcode 811. 子域名访问计数
使用字典统计class Solution: def subdomainVisits(self, cpdomains: List[str]) -> List[str]: dic = {} for i in cpdomains: temp = i.split(' ') n = int(temp[0]) temp = temp[1].split('.') for j i原创 2022-01-17 20:55:40 · 140 阅读 · 0 评论 -
leetcode 268. 丢失的数字
集合差集class Solution: def missingNumber(self, nums: List[int]) -> int: return (set(range(len(nums)+1)) - set(nums)).pop()原创 2022-01-08 19:41:28 · 296 阅读 · 0 评论 -
leetcode 274. H 指数
遍历数组并用一个数组统计各引用次数的文章篇数,最后从后向前遍历统计数组,返回找到的第一个篇数大于等于引用数的即可。class Solution: def hIndex(self, citations: List[int]) -> int: m, t = max(citations), 0 lis = [0] * (m+1) for i in citations: lis[i] += 1原创 2022-01-08 19:34:57 · 283 阅读 · 0 评论 -
leetcode 148. 排序链表
直接读到列表里排序再写回原链表。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def sortList(self, head: Optional[ListNode]) -> Optional[ListNode原创 2022-01-07 22:41:03 · 185 阅读 · 0 评论 -
leetcode 414. 第三大的数
使用三个变量a、b、c存放前三大的数,遍历数组,为了不储存重复的数,需判断遍历到的数是否位于已存放的大数之间,并更新存放的数。最后判断是否有第三大的数(c是否被修改)并返回。class Solution: def thirdMax(self, nums: List[int]) -> int: a = b = c = -2147483649 # -2**31 - 1 for n in nums: if n > a:原创 2022-01-06 20:19:47 · 142 阅读 · 0 评论 -
leetcode 56. 合并区间
先根据左边界排序,然后用双指针合并class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: intervals = sorted(intervals, key=lambda x: x[0]) ans = [] l, r = intervals[0][0], intervals[0][1] for i in intervals:原创 2022-01-05 21:17:31 · 256 阅读 · 0 评论 -
leetcode 169. 多数元素
使用Counter计数class Solution: def majorityElement(self, nums: List[int]) -> int: c = Counter(nums) return c.most_common()[0][0]原创 2022-01-04 21:43:55 · 267 阅读 · 0 评论 -
leetcode 剑指 Offer 57 - II. 和为s的连续正数序列
双指针class Solution: def findContinuousSequence(self, target: int) -> List[List[int]]: ans = [] l, r = 1, 2 while l < r: s = (l+r) * (r-l+1) / 2 if s == target: ans.append(list(range(原创 2022-01-01 22:49:33 · 172 阅读 · 0 评论 -
leetcode 204. 计数质数
使用埃氏筛,从2开始把没有被标记过的(是质数的)数的倍数标记为0,最后统计2到n中没有被标记的即为质数。class Solution: def countPrimes(self, n: int) -> int: lis = [1] * n for i in range(2, int(n**0.5)+1): if lis[i]: for j in range(i*i, n, i):原创 2021-12-30 23:07:15 · 230 阅读 · 0 评论 -
leetcode 1925. 统计平方和三元组的数目
用哈希表存从1到n中所有的平方数,两层循环遍历1到n并判断平方和是否在表中,因为第二层循环只遍历了第一个数到n,所以结果要*2(前两个数互换肯定也符合条件)。class Solution: def countTriples(self, n: int) -> int: s = {i*i for i in range(1, n+1)} ans = 0 for i in range(1, n+1): for j in rang原创 2021-12-29 18:26:38 · 263 阅读 · 0 评论 -
leetcode 1566. 重复至少 K 次且长度为 M 的模式
判断模式*重复次数是否出现。class Solution: def containsPattern(self, arr: List[int], m: int, k: int) -> bool: for i in range(len(arr) - m*k + 1): if arr[i: i+m*k] == arr[i: i+m] * k: return True return False...原创 2021-12-28 16:59:48 · 181 阅读 · 0 评论 -
leetcode 700. 二叉搜索树中的搜索
迭代,比较给定值与当前值,若给定值比当前值小则往左走,否则往右走(二叉搜索树左子树所有节点的元素值均小于根的元素值,右子树所有节点的元素值均大于根的元素值。)# Definition for a binary tree node.# class TreeNode:# def __init__(self, val=0, left=None, right=None):# self.val = val# self.left = left# sel原创 2021-12-27 23:34:32 · 121 阅读 · 0 评论 -
leetcode 1534. 统计好三元组
暴力class Solution: def countGoodTriplets(self, arr: List[int], a: int, b: int, c: int) -> int: length = len(arr) ans = 0 for i in range(length-2): for j in range(i+1,length-1): if abs(arr[i] - arr[原创 2021-12-27 23:27:19 · 110 阅读 · 0 评论 -
leetcode 543. 二叉树的直径
测量每个节点左子树和右子树的最长长度,并记录最长的左子树+右子树长度(直径),因为直径可能出现在任意一个节点上,所以要测量所有节点。# 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 = rig原创 2021-12-27 21:39:22 · 215 阅读 · 0 评论 -
leetcode 530. 二叉搜索树的最小绝对差
# 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 getMinimumDifference(self, root: TreeNod原创 2021-12-27 21:04:32 · 147 阅读 · 0 评论 -
leetcode 剑指 Offer 25. 合并两个排序的链表
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode: cur = head = ListNode(0)原创 2021-12-27 20:27:06 · 302 阅读 · 0 评论 -
leetcode 剑指 Offer 06. 从尾到头打印链表
将链表读取到列表中,然后反转列表class Solution: def reversePrint(self, head: ListNode) -> List[int]: ans=[] while(head): ans.append(head.val) head = head.next return ans[::-1]原创 2021-12-15 00:24:22 · 197 阅读 · 0 评论 -
leetcode 面试题 02.07. 链表相交
使用两个指针分别从两个链表的头结点开始向后走,当走完自身长度之后,从另一条链表的头结点开始向后走,当两个指针相遇(或同为空,即两条链表不相交)时,即为相交结点。当两个指针相遇时,其均走了自身长度(相交结点之前+公共链表)+另一条链表的相交结点之前的部分。(加起来刚好长度相等)class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: curA, cu原创 2021-12-15 00:18:00 · 211 阅读 · 0 评论 -
leetcode 面试题 02.06. 回文链表
把链表放入列表然后判断列表是否是回文的class Solution: def isPalindrome(self, head: ListNode) -> bool: lis = [] while head: lis.append(head.val) head = head.next for i in range(len(lis)//2): if lis[i] != lis[原创 2021-12-13 23:11:32 · 406 阅读 · 0 评论 -
leetcode 203. 移除链表元素
遍历一遍然后删除就行了class Solution: def removeElements(self, head: ListNode, val: int) -> ListNode: head = ListNode(0, head) cur = head while cur.next: if cur.next.val == val: cur.next = cur.next.next原创 2021-12-12 01:21:48 · 155 阅读 · 0 评论 -
leetcode 876. 链表的中间结点
快慢指针,快指针一次走两步,慢指针一次走一步,最后快指针走到尾结点的时候慢指针就在中间。class Solution: def middleNode(self, head: ListNode) -> ListNode: fast, slow = head, head while fast and fast.next: slow = slow.next fast = fast.next.next r原创 2021-12-12 01:10:56 · 170 阅读 · 0 评论 -
leetcode 160. 相交链表
使用两个指针分别从两个链表的头结点开始向后走,当走完自身长度之后,从另一条链表的头结点开始向后走,当两个指针相遇(或同为空,即两条链表不相交)时,即为相交结点。当两个指针相遇时,其均走了自身长度(相交结点之前+公共链表)+另一条链表的相交结点之前的部分。class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: curA, curB = headA,原创 2021-12-09 21:05:38 · 171 阅读 · 0 评论 -
leetcode 19. 删除链表的倒数第 N 个结点
使用快慢指针,让快指针先走n步,然后让快慢指针同时往后走,快指针到达末尾的时候,慢指针指向的即为倒数第n个结点。class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: head = ListNode(next=head) slow, quick = head, head for _ in range(n): quick原创 2021-12-08 21:40:04 · 184 阅读 · 0 评论 -
leetcode 206. 反转链表
用三个变量存一下前一个、中间和下一个,然后让中间next的指向前一个,然后一直往后走就行了。class Solution: def reverseList(self, head: ListNode) -> ListNode: if not head or not head.next: return head per, cur, pos = head, head.next, head.next.next per.next = None原创 2021-12-07 00:09:15 · 433 阅读 · 0 评论 -
leetcode 7. 整数反转
使用切片反转,然后判断是否超范围class Solution: def reverse(self, x: int) -> int: y = int(str(abs(x))[::-1]) if y > 2**31-1 or y < -2**31: return 0 else: return y if x > 0 else -y...原创 2021-12-03 22:35:32 · 706 阅读 · 0 评论 -
leetcode 1. 两数之和 python解法
遍历数组,判断目标和当前数的差是否为前面出现过的数(存在字典中),如果不存在则将当前数和下标存在字典中,存在则返回当前下标和字典中存的下标。class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: dic = {} for i in range(len(nums)): if target - nums[i] in dic:原创 2021-12-02 22:00:59 · 878 阅读 · 0 评论 -
[leetcode] 3. 无重复字符的最长子串 python解法
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列原创 2021-07-17 23:26:46 · 133 阅读 · 0 评论 -
[leetcode] 856. 括号的分数 python解法
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。示例 1:输入: “()”输出: 1示例 2:输入: “(())”输出: 2示例 3:输入: “()()”输出: 2示例 4:输入: “(()(()))”输出: 6class Solution(object): def scoreOfParentheses(self, S):原创 2021-07-17 23:21:39 · 148 阅读 · 0 评论 -
[leetcode] 264. 丑数 II python解法
给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例 1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2:输入:n = 1输出:1解释:1 通常被视为丑数。思路:动态规划,用还没乘过 2 的最小丑数乘以 2;用还没乘过 3 的最小丑数乘以 3;用还没乘过 5 的最小丑数乘以 5。然后在得到的数字中取最小,就是新的丑数。class So原创 2021-07-14 17:44:27 · 230 阅读 · 0 评论