首页 > 其他分享 >Leetcode刷题-动态规划

Leetcode刷题-动态规划

时间:2024-03-16 21:46:17浏览次数:32  
标签:temp int 杨辉三角 range prices 动态 Leetcode dp 刷题

爬楼梯

链接:70. 爬楼梯 - 力扣(LeetCode)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
示例 1:
输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:
输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
提示:
1 <= n <= 45

dp[i]:i阶台阶有dp[i]种方法

dp[i]=dp[i-1]+dp[i-2]

class Solution:
    def climbStairs(self, n: int) -> int:
        dp=[0]*50
        dp[1],dp[2]=1,2
        for i in range(3,n+1):
            dp[i]=dp[i-1]+dp[i-2]
        return dp[n]

杨辉三角

链接:118. 杨辉三角 - 力扣(LeetCode)

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
1 <= numRows <= 30
class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        dp=[[1]]
        for i in range(1,numRows):
            temp=[1]
            for j in range(1,len(dp[i-1])):
                temp.append(dp[i-1][j]+dp[i-1][j-1])
            temp.append(1)
            dp.append(temp)
        return dp

链接:119. 杨辉三角 II - 力扣(LeetCode)

输出杨辉三角第i行

class Solution:
    def getRow(self, rowIndex: int) -> List[int]:
        dp=[[1]]
        for i in range(1,rowIndex+1):
            temp=[1]
            for j in range(1,len(dp[i-1])):
                temp.append(dp[i-1][j]+dp[i-1][j-1])
            temp.append(1)
            dp.append(temp)
        return dp[rowIndex]

买卖股票的最佳时机

链接:121. 买卖股票的最佳时机 - 力扣(LeetCode)

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 105
0 <= prices[i] <= 104

dp[i][0]:第i天买花最小前,dp[i][1]:第i天卖的最佳价值

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dp=[[0,0] for i in range(len(prices))]
        dp[0][0]=0-prices[0]
        for i in range(1,len(prices)):
            dp[i][0]=max(0-prices[i],dp[i-1][0])
            dp[i][1]=max(prices[i]+dp[i-1][0],dp[i-1][1])
        return dp[len(prices)-1][1]

 

标签:temp,int,杨辉三角,range,prices,动态,Leetcode,dp,刷题
From: https://www.cnblogs.com/xiaoruru/p/18077670

相关文章

  • (C++)DP动态规划
    天下苦DP久已。​ DP非常重要,2022年蓝桥杯应该改名为DP杯,至于2023年那个我觉得应该叫做暴力杯。​ DP的核心思想在于,通过前面几个状态来推导下一个数据是什么,也就是走一步是一步。其本质实际上是记忆化搜索,但是有些玄学的事情就是,有时候记忆化会因为玄学递归问题TLE,但DP的那四......
  • LeetCode2024年3月14日每日一题(2789. 合并后数组中的最大元素)
    这里写目录标题单调栈代码的核心逻辑如下:单调栈单调栈是一种特殊的数据结构,它在算法设计中被广泛使用,尤其是在处理与栈相关的问题时,如括号匹配、最长有效括号子串、最小窗口子串等。单调栈的核心思想是栈内的元素保持某种单调性(递增或递减),这使得它在处理特定问题时比......
  • 动态代理和反射的基本学习
    今天在跟着视频学习的时候发现老师讲的知识点都只简单的了解过但是没有深入学习,导致在跟着视频敲代码的时候完全不知道自己是在写什么东西。所以决定先把基础补一补再继续跟老师做项目。打算先把自定义注解的编写和解析学好,想要学号这一块,又涉及到了Aop和java中反射的学习,那么话......
  • 奇怪的回溯增加了 | leetcode131分割回文串
    题目要求:给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案示例1:输入:s="aab"输出:[["a","a","b"],["aa","b"]]示例2:输入:s="a"输出:[["a"]]上述为常规做法,这里回溯的时候是i+1的,就很正常 这是我第一次做的时候自己憋出来......
  • 动态规划专项训练记录 2024.3
    PathsontheTree若使分数最大,则尽量每条路径都到叶子,看到题目说绝对值差不超过1,可以发现是要尽量平均分配,设余r条路径既然要最大化贡献且剩下的路径要不重复的分配,那就选取前r条从该节点到叶子节点权值和最大的链,递归求取但有一种情况,若在点u选了路径t,在fa再次选择,就会不满......
  • LeetCode 992. K 个不同整数的子数组
    解题思路举一个例子可能会比较好理解nums=[1,2,1,2,3],k=2i表示的是右指针,j表示的是左指针。i=3时,需要求出符合子数组中含有k个不同整数,此时的j1=0需要求出符合子数组中含有k-1个不同整数,此时的j2=1j1~j2之间就是符合子数组中含有k个不同整数的子数组个数。相......
  • 刷题统计
    题目小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做a道题目,周六和周日每天做b道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于n题?题目描述:小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做a道题目,周六......
  • C语言-动态内存管理
    动态内存管理为什么存在动态内存分配动态内存函数介绍malloc和freecallocrealloc常见动态内存错误1对NULL指针的解引用操作2对动态开辟空间的越界访问3对非动态开辟内存使用free释放4使用free释放一块动态开辟内存的一部分5.对同一块动态内存多次释放6.动态开辟......
  • P3374 【模板】树状数组 动态求连续区间和 刷题笔记
    我们创建如下的树状数组来辅助操作该数组每个s[i]处于第几层取决于其二进制最后低位的1处于从右往左数第几列显然所有奇数的最右边一位都是1即其最低位的1处于右边第一列所以所有的奇数处于第一层而2,6,10,14的最低位1处于右边第二列 所以这些数处于第二层 8的最......
  • 日期问题 刷题笔记
    思路枚举19600101到20591231这个区间的数获得年月日 判断是否合法如果合法 关于题目给出的日期有三种可能年/月/日日/月/年月/日/年判断是否和题目给出的日期符合如果符合输出闰年{1.被4整除不被100整除  2.被400整除}补位写法“%02d" 如果不足两位......