(剑指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


相关文章
|
11月前
|
存储 算法
数据结构中迷宫问题求解
数据结构中迷宫问题求解
94 3
|
11月前
|
分布式计算 算法 Spark
spark学习之 GraphX—预测社交圈子
spark学习之 GraphX—预测社交圈子
290 0
|
11月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
280 1
|
11月前
|
Windows
禁止ie自动跳转edge
禁止ie自动跳转edge
358 0
|
9月前
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
403 17
|
11月前
|
缓存 JavaScript Java
vue2知识点:组件自定义事件
vue2知识点:组件自定义事件
171 3
|
11月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
150 5
|
12月前
|
Linux Python
用python扫描linux开放的端口(3种方式)
这篇文章介绍了三种使用Python实现Linux端口扫描的方法,包括基础版端口扫描、全端口扫描和多线程扫描技术。
374 16
|
11月前
|
Go Docker Python
docker的python与go镜像的制作
docker的python与go镜像的制作
153 1
|
11月前
|
算法 物联网 云计算
计算之魂思考一
计算之魂思考一
80 0