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


相关文章
|
前端开发 架构师 搜索推荐
COLA 4.0:直击应用架构本质的最佳实践
COLA 4.0:直击应用架构本质的最佳实践
3659 0
COLA 4.0:直击应用架构本质的最佳实践
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
518 17
|
缓存 JavaScript Java
vue2知识点:组件自定义事件
vue2知识点:组件自定义事件
272 3
|
Linux Python
用python扫描linux开放的端口(3种方式)
这篇文章介绍了三种使用Python实现Linux端口扫描的方法,包括基础版端口扫描、全端口扫描和多线程扫描技术。
509 16
|
存储 NoSQL Java
后端综合知识大汇总
后端综合知识大汇总
149 0
|
人工智能 安全 数据挖掘
会议之眼报道:助力学术成就!第六版CCF中国计算机学会推荐国际学术会议和期刊目录!
会议之眼快报:CCF中国计算机学会是全国性、学术性、非营利的学术团体,由从事计算机及相关科学技术领域的个人和单位自愿组成。作为独立社团法人,CCF是中国科学技术协会的成员之一,是全国一级学会! CCF的前身是1962年成立的中国电子学会计算机专业委员会。在文革期间的1978年1月,学会恢复了活动,并更名为中国电子学会计算机学会。1985年3月,经过国家体改委批准,正式成立了中国计算机学会。截至2022年4月,CCF下设14个工作委员会、39个专业委员会、4个“计算+行业”分会以及36个地方会员活动中心。
|
机器学习/深度学习 PyTorch 算法框架/工具
fast.ai 机器学习笔记(三)(4)
fast.ai 机器学习笔记(三)
147 0
fast.ai 机器学习笔记(三)(4)
|
存储 JSON 关系型数据库
MySQL 8.0 功能特性
MySQL 作为最流行的开源关系型数据库管理系统之一,不断推陈出新,满足用户不断增长的需求和期望。在本篇博客中,我们将探讨 MySQL 8.0 版本带来的一些令人振奋的功能特性。
387 0
|
存储 Ubuntu 安全
2023 年 10 个最受欢迎的 Linux 发行版
2023 年 10 个最受欢迎的 Linux 发行版
11902 0
|
关系型数据库 MySQL
MYSQL 不允许在子查询的同时删除原表数据的解决方法 specify target table
MYSQL 不允许在子查询的同时删除原表数据的解决方法 specify target table
202 0