随笔分类 - leetcode算法题
摘要:不需要额外空间的方法,就往位运算上想 136. 只出现一次的数字 异或运算的性质: 1.交换律:a ^ b ^ c <=> a ^ c ^ b 2.任何数于0异或为任何数 0 ^ n => n 3.相同的数异或为0: n ^ n => 0 a = [2,3,2,4,4] 2 ^ 3 ^ 2 ^ 4
阅读全文
摘要:1615. 最大网络秩 直接模拟即可 class Solution: def maximalNetworkRank(self, n: int, roads: List[List[int]]) -> int: adjs = defaultdict(set) # 注意是集合 for u, v in ro
阅读全文
摘要:303. 区域和检索 - 数组不可变 记录前i个元素的和,因此sum[left,right + 1]=pre[right + 1]-pre[left] class NumArray: def __init__(self, nums: List[int]): self.pre_sum = [0] fo
阅读全文
摘要:字典树,是一种是一种可以快速插入和搜索字符串的数据结构,有了它可以尽快的进行剪枝。 将字典的信息全部转化到字典树上,只有出现在字典树上的路径,才应该被纳入到搜索空间里。 搜索的时候不是比较target的pos是否匹配,而是比较当前board的字符是否出现在当前trie节点的子节点中。如果遇到了isW
阅读全文
摘要:6077. 巫师的总力量和 **注意:**因为要求连续,所以不能用回溯的方法做 496. 下一个更大元素 I 907. 子数组的最小值之和 class Solution: def sumSubarrayMins(self, arr: List[int]) -> int: res = 0 stack
阅读全文
摘要:处理输入: 牛客: import sys line = sys.stdin.readline().spilt() nums = list(map(int, line.split())) 赛码: n = int(input()) nums = list(map(int, input().split()
阅读全文
摘要:64. 最小路径和 动态规划 class Solution: def minPathSum(self, grid: List[List[int]]) -> int: m, n = len(grid), len(grid[0]) res = 0 dp = [[0]* n for _ in range(
阅读全文
摘要:2368. 受限条件下可到达节点的数目 步骤: 1.根据边建好无向图 [[1, 4, 5], [0, 2, 3], [1], [1], [0], [0, 6], [5]] 2.初始化访问过的节点visited里已经有受限节点了就不会再去访问,并且是set类型的,即不能重复访问 3.q里是当前能够到达
阅读全文
摘要:分治法:分而治之 与递归相伴随 169. 多数元素 (1) 划分 每次将数组拆分为左右两个区间,直至拆成最小规模的问题,每个区间只有一个数。 (2) 求解 递归的求解划分之后的子问题。 在最小的区间里,每个区间只有一个数,那该区间的众数该数。 (3) 合并 一步步的向上合并,合并过程中分为两种情况:
阅读全文
摘要:242. 有效的字母异位词 哈希表方法,可适应更大规模字符集 class Solution: def isAnagram(self, s: str, t: str) -> bool: dict_ = {} for ch in s: if ch in dict_: dict_[ch] += 1 els
阅读全文
摘要:684. 冗余连接 最开始,每个人都是自己的爹。 因为所有人名字都是自然数1,2,3,4。构建一个【爹们】数组,parents,就直接把第一位朋友1的爹放在index为1的位置,第二位朋友2的爹放在index为2的位置,排排站好 如果某个人的爹就是自己,那他就不可能再有别的爹了。 所以,去paren
阅读全文
摘要:### 模拟 #### [621. 任务调度器](https://leetcode.cn/problems/task-scheduler/) 假设 A有3个(maxCt = 3), n = 2, 需要 待命 说明'x'的位置都填不满, 实际完成任务时间 = (maxCt-1)*(n+1)+1 > l
阅读全文
摘要:455. 分发饼干 从小的饼干开始发,注意从0开始如果饼干大于第0个胃口,则res+1,即满足了1个胃口 class Solution: def findContentChildren(self, g: List[int], s: List[int]) -> int: g.sort() s.sort
阅读全文
摘要:#### [20. 有效的括号](https://leetcode.cn/problems/valid-parentheses/) 用字典存匹配的括号 比较栈里第一个元素的值与当前括号 `考过两次` ```python class Solution: def isValid(self, s: str
阅读全文
摘要:509. 斐波那契数 方法1:使用数组将动态规划每个状态存下来 时间复杂度$O(n)$、空间复杂度$O(n)$ class Solution: def fib(self, n: int) -> int: if n == 0:return 0 f = [0] * (n+1) f[1] = 1 for
阅读全文
摘要:6079. 价格减免 pattern = re.compile(r"^\$(\d+\.?\d*)$") if pattern.match(w): 匹配以$开头用^ \ $,以数字结尾用$,其中整数部分可以有1个或多个数字用\d+,小数点0个或1个用.?,小数部分0个或者多个用\d* 6095. 强密
阅读全文
摘要:(1)589. N 叉树的前序遍历 class Solution: def preorder(self, root: 'Node') -> List[int]: res = [] def traversal(root): if not root: return res.append(root.val
阅读全文
摘要:541. 反转字符串 II class Solution: def reverseStr(self, s: str, k: int) -> str: p = 0 while p < len(s): q = p + k s = s[:p] + s[p:q][::-1] + s[q:] p = p +
阅读全文
摘要:700. 二叉搜索树中的搜索 为什么要有返回值: 因为搜索到目标节点就要立即return, 这样才是找到节点就返回(搜索某一条边),如果不加return,就是遍历整棵树了。 class Solution: def searchBST(self, root: TreeNode, val: int) -
阅读全文
摘要:基本框架: #### [704. 二分查找](https://leetcode.cn/problems/binary-search/) 两种写法 ```python class Solution: def search(self, nums: List[int], target: int) -> i
阅读全文