摘要:62. 不同路径 1 class Solution: 2 def uniquePaths(self, m: int, n: int) -> int: 3 # 创建一个二维列表用于存储唯一路径数 4 dp = [[0] * n for _ in range(m)] 5 6 # 设置第一行和第一列的基本
阅读全文
摘要:509. 斐波那契数 1 class Solution: 2 def fib(self, n: int) -> int: 3 if n <= 2: 4 return n 5 6 prev1, prev2 = 0, 1 7 for _ in range(2, n+1): 8 sum_value = p
阅读全文
摘要:56. 合并区间 时间复杂度: O(nlogn) 空间复杂度: O(logn),排序需要的空间开销 1 class Solution: 2 def merge(self, intervals): 3 result = [] 4 if len(intervals) == 0: 5 return res
阅读全文
摘要:406. 根据身高重建队列 1. 一定要想如何确定一个维度,然后再按照另一个维度重新排列。 2. 先确定身高的维度,降序排列。 3. 按照身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。 4. 局部最优:优先按身高高的peop
阅读全文
摘要:134. 加油站 局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置。 时间复杂度:O(n) 空间复杂度:O(1) 1 class Solution: 2 def canCompleteCircuit(se
阅读全文
摘要:55. 跳跃游戏 1. 跳跃的覆盖范围。这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点! 2. 贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。 时间复杂度: O(n) 空间复杂度: O(1) 1 class Solution: 2
阅读全文
摘要:1.贪心算法一般分为如下四步: 将问题分解为若干个子问题 找出适合的贪心策略 求解每一个子问题的最优解 将局部最优解堆叠成全局最优解 455. 分发饼干 1. 局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。 时间复杂度:O(nlogn) 空间复杂度:O(1
阅读全文
摘要:491. 递增子序列 不对原数组进行排序,利用set对同层的子集进行去重。 1 class Solution: 2 def findSubsequences(self, nums): 3 result = [] 4 path = [] 5 self.backtracking(nums, 0, pat
阅读全文
摘要:257. 二叉树的所有路径 1 # Definition for a binary tree node. 2 # class TreeNode: 3 # def __init__(self, val=0, left=None, right=None): 4 # self.val = val 5 #
阅读全文