(剑指Offer)10、菲波那切数列I—10、青蛙跳台阶问题II—63、股票的最大利润(2021/12/04)

简介: (剑指Offer)10、菲波那切数列I—10、青蛙跳台阶问题II—63、股票的最大利润(2021/12/04)

10、菲波那切数列I

题目描述

难度:简单

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0, F(1) = 1

F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2

输出:1

示例 2:

输入:n = 5

输出:5。

参考代码:
class Solution:
    def fib(self, n: int) -> int:
        if n <2:
            return n
        f1 = 0
        f2 = 0
        f3 = 1
        for i in range(2,n+1):
            f1,f2 = f2,f3
            f3 = (f1 + f2) % 1000000007
        return f3

10、青蛙跳台阶问题II

题目描述

难度:简单

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2

输出:2

示例 2:

输入:n = 7

输出:21

示例 3:

输入:n = 0

输出:1

代码部分
class Solution:
    def numWays(self, n: int) -> int:
        if n == 0:
            return 1
        f1,f2,f3 = 0,1,1
        for i in range(2,n+1):
            f1,f2 =f2,f3
            f3 = (f1+f2) % 100000007
        return f3

63、股票的最大利润

题目描述

难度:中等

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

示例 1:

输入: [7,1,5,3,6,4]

输出: 5

解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。

注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

示例 2:

输入: [7,6,4,3,1]

输出: 0

解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

解题思路

最简单的思路当然是两重循环暴力枚举,寻找不同天数下的最大利润。

但更好的做法是进行一次遍历。设置两个变量 minprice(用来记录买入的最小值)、maxprofit(用来记录可获取的最大利润)。

进行一次遍历,遇到当前价格比 minprice 还要小的,就更新 minprice。如果单签价格大于或者等于 minprice,则判断一下以当前价格卖出的话能卖多少,如果比 maxprofit 还要大,就更新 maxprofit。

代码部分
from typing import List
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        minprice = 10010
        maxprofit = 0
        for price in prices:
            if price < minprice:
                minprice = price
            elif price - minprice >maxprofit:
                maxprofit = price - minprice
        return maxprofit


相关文章
|
7月前
|
算法 C++ Python
leetcode-122:买卖股票的最佳时机 II (贪心算法)
leetcode-122:买卖股票的最佳时机 II (贪心算法)
53 1
|
算法
代码随想录 Day27 贪心02上 LeetCode T122 买卖股票的最佳时机 II
代码随想录 Day27 贪心02上 LeetCode T122 买卖股票的最佳时机 II
39 0
|
6月前
|
算法
leetcode题解:121.买卖股票的最佳时机
leetcode题解:121.买卖股票的最佳时机
42 0
|
6月前
|
存储 算法 数据可视化
LeetCode 题目 121:买卖股票的最佳时机
LeetCode 题目 121:买卖股票的最佳时机
|
7月前
代码随想录 Day41 动态规划09 LeetCode T121 买卖股票的最佳时机 T122 买卖股票的最佳时机II
代码随想录 Day41 动态规划09 LeetCode T121 买卖股票的最佳时机 T122 买卖股票的最佳时机II
48 0
|
7月前
代码随想录 Day43 动态规划11 LeetCode T309 买卖股票的最佳时期含冷冻期 T714买卖股票的最佳时机含手续费
代码随想录 Day43 动态规划11 LeetCode T309 买卖股票的最佳时期含冷冻期 T714买卖股票的最佳时机含手续费
53 0
|
7月前
|
存储 算法 程序员
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
137 0
|
存储
剑指offer 71. 股票的最大利润
剑指offer 71. 股票的最大利润
61 0
|
算法
Leecode121. 买卖股票的最佳时机
Leecode121. 买卖股票的最佳时机
39 0
|
算法
一个函数解决【LeetCode 买卖股票的最佳时机】系列所有题目!
一个函数解决【LeetCode 买卖股票的最佳时机】系列所有题目!
107 0