LeetCode经典150题Golang版.121. 买卖股票的最佳时机

2023-12-17

题目

121. 买卖股票的最佳时机

给定一个数组 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

思路与代码

股票问题一共有六道题,链接如下:

  • 121. 买卖股票的最佳时机
  • 122. 买卖股票的最佳时机 II
  • 123. 买卖股票的最佳时机 III
  • 188. 买卖股票的最佳时机 IV
  • 309. 最佳买卖股票时机含冷冻期
  • 714. 买卖股票的最佳时机含手续费

每个问题都有优质的题解,但是大多数题解没有建立起这些问题之间的联系,也没有给出股票问题系列的通解。这篇文章给出适用于全部股票问题的通解,以及对于每个特定问题的特解。

方法一:暴力法

package main

import "fmt"

func maxProfit(prices []int) int {
	n, ans := len(prices), 0
	for i := 0; i < n; i++ {
		for j := i + 1; j < n; j++ {
			ans = max(ans, prices[j]-prices[i])
		}
	}
	return ans
}

func main() {
	nums := []int{7, 1, 5, 3, 6, 4}
	res := maxProfit(nums)
	fmt.Println(res)
}

方法二:一次遍历

如果可以在历史最低点买入股票就好了,然后在最高点卖出。具体作法是用一个大数置换出数组中的小数(或者判断是否是第一天,或者跳过第一天),这样,每次循环都比较就得到了 miniprice

func maxProfit(prices []int) int {
	miniprice, maxprofit := math.MaxInt64, 0
	for i := 0; i < len(prices); i++ {
        if (prices[i] < miniprice) {
			miniprice = prices[i]
        } else if (prices[i]-miniprice > maxprofit) {
			maxprofit = prices[i] - miniprice
		}
	}
	return maxprofit
}

func main() {
	nums := []int{7, 1, 5, 3, 6, 4}
	res := maxProfit(nums)
	fmt.Println(res)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode经典150题Golang版.121. 买卖股票的最佳时机 的相关文章

随机推荐

  • 剑指 Offer(第2版)面试题 34:二叉树中和为某一值的路径

    剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 解法1 深度优先搜索 剑指 Offer 第2版 面试题 34 二叉树中和为某一值的路径 题目来源 47 二叉
  • ES6 面试题 | 13.精选 ES6 面试题

    前端开发工程师 主业 技术博主 副业 已过CET6 阿珊和她的猫 CSDN个人主页 牛客高级专题作者 在牛客打造高质量专栏 前端面试必备 蓝桥云课签约作者 已在蓝桥云课上架的前后端实战课程 Vue js 和 Egg js 开发企业级健康管理
  • 时序预测 | Python实现GRU-XGBoost组合模型电力需求预测

    时序预测 Python实现GRU XGBoost组合模型电力需求预测 目录 时序预测 Python实现GRU XGBoost组合模型电力需求预测 预测效果 基本描述 程序设计 参考资料
  • DeepCache

    这里介绍一种名为DeepCache的无需训练的方法 它利用了去噪过程中模型深层特征的相似性 通过缓存 Cache 来避免重新计算网络中的深层特征 仅计算网络的浅层 从而减少计算量 实验展示了DeepCache相较于需要重新训练的现有剪枝和蒸
  • 时序预测 | Python实现LSTM-Attention电力需求预测

    时序预测 Python实现LSTM Attention电力需求预测 目录 时序预测 Python实现LSTM Attention电力需求预测 预测效果 基本描述 程序设计 参考资料
  • 时序预测 | Python实现LSTM-Attention-XGBoost组合模型电力需求预测

    时序预测 Python实现LSTM Attention XGBoost组合模型电力需求预测 目录 时序预测 Python实现LSTM Attention XGBoost组合模型电力需求预测 预测效果 基本描述 程序设计 参考资料
  • 目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】机器视觉(基础篇)(十三)

    目录 前言 几个高频面试题目 人工智能 机器学习 计算机视觉之间的关系 知识储备 计算机视觉 计算机图像学 图像处理基础知识 光学棱镜
  • 工业缺陷检测~

    这里介绍算法在图像处理中的应用 同时还介绍了常用的图像处理算法和现有可用的视觉检测软件库 文章旨在帮助读者更好地了解算法在图像处理中的应用 提高图像处理的效果和效率 算法 预处理算法 检测算法 常用的图像处理算法 1 图像变换 空域与频域
  • WPF-UI HandyControl 控件简单实战

    文章目录 前言 UserControl简单使用 新建项目 直接新建项目 初始化UserControl Geometry 矢量图形 额外Icon导入
  • 关于“Python”的核心知识点整理大全24

    10 1 6 包含一百万位的大型文件 前面我们分析的都是一个只有三行的文本文件 但这些代码示例也可处理大得多的文件 如果我们有一个文本文件 其中包含精确到小数点后1 000 000位而不是30位的圆周率值 也可 创建一个包含所有这些数字的字
  • 知识图谱之关键实体数据爬取

    目录 爬取实体概览 爬取技术介绍 requests html Selenium 两者比较 学习路径 代码结构 高可用爬取策略 基于文件记录位点 请求失败指数退避重试 爬取代码 品牌数据 车系数据 车型数据 车型配置数据 代码地址 爬取实体概
  • 在Windows上通过cmake-gui及VS2019来 编译OpenCV-4.5.3源码

    文章目录 下载OpenCV 4 5 3源码 下载opencv contrib 4 5 3源码 打开cmake gui 选择生成器 通过 Visual Studio 2019 打开构建好的 sln工程文件 执行编译操作 执行安装操作
  • 屏幕超时休眠-Android13

    屏幕超时休眠 Android13 1 设置界面 1 2 属性值 1 2 1 默认值 1 2 2 最小值限制 1 3 属性值疑问 Settings System SCREEN OFF TIMEOUT 2 超时灭屏
  • OSG中几何体的绘制(一)

    本章主要介绍一些几何体的绘制方法 绘制几何体在场景中是非常常见的 也是最基本的 在很多应用程序中可以看到相当复杂的场景 但不管场景有多复杂 它们都是由少数几个基本的图形元素构建而成的 只要想想达芬奇那些伟大的作品也是由铅笔和画刷所完成的 读
  • xtcocotools 安装 mmcv

    目录 xtcocotools 2023测试成功 mmcv安装方法 xtcocotools 2023测试成功 pip install xtcocotools mmcv安装方法 pip install U openmim mim install
  • 星纵物联2024届秋招/校招内推信息/内推码

    公司名称 星纵物联 内推码 ESVMA3 内推来源 内推鸭小程序 官方招聘网站 厦门星纵物联招聘官网
  • yyy888

    8
  • MyBatis中的MapperScan的作用是干什么的?

    MapperScan 是 MyBatis Plus 提供的注解 它的作用是扫描指定包下的所有接口 将其注册成 MyBatis 的 Mapper 在 MyBatis Plus 中 它是用于替代原生 MyBatis 中 XML 配置文件中的
  • HarmonyOS(十四)——状态管理之@State装饰器(组件内状态)

    前言 在 初识状态管理 我们了解了状态管理的基本概念 以及管理组件拥有的状态有哪几种装饰器 今天我们就来认识一下第一种装饰器 State装饰器 组件内状态 概述 State装饰的变量 或称为状态变量 一旦变量拥有了状态属性 就和自定义组件的
  • LeetCode经典150题Golang版.121. 买卖股票的最佳时机

    题目 121 买卖股票的最佳时机 给定一个数组 prices 它的第 i 个元素 prices i 表示一支给定股票第 i 天的价格 你只能选择 某一天 买入这只股票 并选择在 未来的某一个不同的日子 卖出该股票 设计一个算法来计算你所能获