算法
Y·Not·Try
这个作者很懒,什么都没留下…
展开
-
买卖股票的最佳时机
原文题的等价问题是第n天卖掉和第n天不卖掉两种情况取大者,第i天如果不卖掉,则第i天最大利润dp[i] = dp[i-1]第i天如果卖掉,则第i天最大利润dp[i] 为当前股票价格prices[i]-之前最小的价格将两者进行比较取最大值即为最大利润。class Solution: def maxProfit(self, prices: List[int]) -> int: len_prices = len(prices) if len_pr..原创 2020-09-19 11:29:04 · 401 阅读 · 0 评论 -
打家劫舍问题
问题一这里的原问题可以分解为第n天不偷,和第n天偷的两种情况。如果第n天偷,则能偷到的最多钱数是dp[n-2] +nums[n]如果第n天不偷,则能偷到的最多钱数是dp[n-1]class Solution: def rob(self, nums: List[int]) -> int: len_nums = len(nums) if len_nums == 0: return 0 if len_num原创 2020-09-18 20:31:34 · 122 阅读 · 0 评论 -
双指针法之盛最多水的容器
初始时默认选择最左边和最右边的柱子,下次只需向中心移动较小的柱子,因为移动大柱子会导致左右柱子距离变小,但是盛水的高度由于受到小柱子限制不会变高。所以我们只需要向中心移动小柱子才有可能使得盛水高度变高,在宽度变窄的情况下也可能会使得整体的面积大于之前的。class Solution: def maxArea(self, height: List[int]) -> int: left = 0 right = len(height) - 1 ..原创 2020-09-17 16:01:44 · 122 阅读 · 0 评论 -
回溯法之括号生成
class Solution: def generateParenthesis(self, n: int) -> List[str]: res = [] track = "(" def back_track(track, n): left_num , right_num = track.count('('), track.count(')') if left_num == n and righ...原创 2020-09-13 10:31:35 · 212 阅读 · 0 评论 -
回溯模板之组合总和
class Solution: def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: res = [] track = [] def back_track(start, track, target, candidates): if sum(track) == target: re...原创 2020-09-12 21:03:25 · 98 阅读 · 0 评论 -
回溯法之递增子序列
class Solution: def findSubsequences(self, nums: List[int]) -> List[List[int]]: res = [] track = [] used = [] # 使用used数组对同层重复元素剪枝, 使用start变量对下一层重复元素剪枝 len_nums = len(nums) def back_track(start, track, used)...原创 2020-09-13 10:23:57 · 162 阅读 · 0 评论