2021-07-06:股票问题3。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

福大大 答案2021-07-06:

一次遍历法。
时间紧,请直接看代码。
时间复杂度:O(N)。空间复杂度:O(1)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
arr := []int{1, 1, 10, 1, 1, 9, 3}
ret := maxProfit(arr)
fmt.Println(ret)
} func maxProfit(prices []int) int {
N := len(prices)
if N < 2 {
return 0
}
ans := 0
doneOnceMinusBuyMax := -prices[0]
doneOnceMax := 0
min := prices[0]
for i := 1; i < N; i++ {
min = getMin(min, prices[i]) //最小值
ans = getMax(ans, doneOnceMinusBuyMax+prices[i]) //二次交易的最大值
doneOnceMax = getMax(doneOnceMax, prices[i]-min) //一次交易的最大值
doneOnceMinusBuyMax = getMax(doneOnceMinusBuyMax, doneOnceMax-prices[i]) //一次交易的最大值减去当前值
}
return ans
} func getMax(a int, b int) int {
if a > b {
return a
} else {
return b
}
} func getMin(a int, b int) int {
if a < b {
return a
} else {
return b
}
}

执行结果如下:


左神java代码

2021-07-06:股票问题3。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意:你不能同时参与多笔交易(的更多相关文章

  1. 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股票. 示例 ...

  2. C#实现如何判断一个数组中是否有重复的元素 返回一个数组升序排列后的位置信息--C#程序举例 求生欲很强的数据库 别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework

    C#实现如何判断一个数组中是否有重复的元素   如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hasht ...

  3. 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数

    找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace s ...

  4. C#实现如何判断一个数组中是否有重复的元素

    如何判断一个数组中是否有重复的元素 实现判断数组中是否包含有重复的元素方法 这里用C#代码给出实例 方法一:可以新建一个hashtable利用hashtable的Contains方法进行查找 /// ...

  5. 获取一个数组里面第K大的元素

    如何在O(n)内获取一个数组比如{9, 1, 2, 8, 7, 3, 6, 4, 3, 5, 0, 9, 19, 39, 25, 34, 17, 24, 23, 34, 20}里面第K大的元素呢? 我 ...

  6. 496. Next Greater Element I 另一个数组中对应的更大元素

    [抄题]: You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subse ...

  7. 2021.07.20 CF1477A Nezzar and Board(最大公因数,未证)

    2021.07.20 CF1477A Nezzar and Board(最大公因数,未证) CF1477A Nezzar and Board - 洛谷 | 计算机科学教育新生态 (luogu.com. ...

  8. 2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ π )

    2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ \(\pi\) ) https://www.luogu.com.cn/problem/P2508 题意: 求一个给定的圆 \( ...

  9. 2021.07.17 题解 CF1385E Directing Edges(拓扑排序)

    2021.07.17 题解 CF1385E Directing Edges(拓扑排序) CF1385E Directing Edges - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) ...

  10. 2021.08.06 P3478 STA-Station(树形结构)

    2021.08.06 P3478 STA-Station(树形结构) [P3478 POI2008]STA-Station - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给 ...

随机推荐

  1. Vscode 界面语言换成中文

    作为编译器,Visual Studio Code是非常多能化的,但是界面英文对于我这种菜鸟新手造成了很大的困扰. 所以切换成中文更方便. Ctrl+shift+x   在左侧出现"扩展&qu ...

  2. windows下配置JDK教程

    1.思路: 首先要确定所要用的应用可以兼容哪个版本jdk,然后开始下载对应的版本,最后安装,配置环境变量,测试,部署完成. 2.jdk下载地址: 如果下载全新的jdk可以直接百度jdk官网下载 如果需 ...

  3. 使用MyBatis时需要注意到的事情------执行添加、修改和删除操作时,一定要记得提交事务

    今天在重写添加操作代码时,发现自己写的代码没有任何报错,使用断点进行查询,发现一切正常,但是注册使用的数据就是无法添加到数据库里面 然后就去之前看过的视频里面去找错误,就发现这样一个小细节: 在视频里 ...

  4. python基础篇:Python基础知识,帮助初学者快速入门

    Python是一种高级编程语言,它易于学习和使用,因此成为了许多人的首选编程语言.本文将介绍Python的基础知识,以帮助初学者快速入门. 安装Python 在开始学习Python之前,您需要安装Py ...

  5. 2023年数字化经济与管理科学国际学术会议(CDEMS2023)

    基本信息 大会官网:www.cdems.org 大会时间:2023年4月21-23日 大会地点:中国开封 截稿时间:2023年4月16日(此处有变动) 接受/拒稿通知:投稿后1周 收录检索:CPCI, ...

  6. 西瓜播放器api的坑 直播设置自动播放

    我们先看一下官方DEMO let player = new HlsPlayer({ id: 'mse', url: '//sf1-cdn-tos.huoshanstatic.com/obj/media ...

  7. monggodb项目操作

    1.回顾 1.express + node 1.1 准备工作 前后端不分离开发 --- 前端负责写页面,后端负责渲染 --- admin-lte 1.2 创建express项目 express mya ...

  8. 验证ADG的坏块检测和自动修复

    环境: Oracle 19c ADG(主库:单实例:备库:RAC) 1.主库新建测试文件 2.主库创建测试表 3.查询表对应数据文件信息 4.模拟数据文件物理坏块 5.查询对应测试表 6.进一步查询日 ...

  9. 什么时候需要使用try-catch

    代码执行预料不到的情况,或出错的可能性很大时,使用try-catch语句 构造一个文件输入流(上传文件时,线上环境的内存情况不确定)出错的可能性很大 文件上传写入, 数据库事务的提交,还有摄像头和打印 ...

  10. 二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈

    二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安装 后续尽可能第一时间更新 ...