买卖一次股票的问题----go语言实现
Posted 有关于S27的故事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了买卖一次股票的问题----go语言实现相关的知识,希望对你有一定的参考价值。
问题
有一个数组[7,0,2,8,5,4],买卖股票,数组的下标对应着日期
你可以操作一次买入与卖出 如:在0买入,在8卖出,赚了8-0 ,在2买入5卖出,就赚3元
不能 在0买入,7卖出(意思说,卖出要在买入后)
如果数组[7,5,4,3,2,1] 不买入卖出,赚0
求怎么买卖赚最多,最多只能买卖一次
思路分析
1.卖出的下标,在买入的下标后面
2.遍历找到每一下标买卖的最大值
1)选择一个下标,然后遍历这个下标后面的所有数据的最大值,相减就是当前下标的最大利润
2)把这个利润放入到一个数组中
3)继续遍历下一个下标
3.再从这些最大值中,找出最大的一个
代码实现
func solution(slice []int) (max int)
resSlice := make([]int,len(slice))
for key, value := range slice
resSlice[key] = value
for i := key; i < len(slice); i++
//找当前元素,后面元素的最大值
if slice[i] > resSlice[key]
resSlice[key] = slice[i]
fmt.Printf("solution() 最大的数resSlice[key]:%#v\\n",resSlice[key])
resSlice[key] = resSlice[key] - value //最大的差值,可能是个负数
max = 0 //这里设置为0,如果所以数都是负,就不买入卖出,赚0元
fmt.Println("resSlice=",resSlice)
for _,v := range resSlice
if v > max
max = v
return
func main()
fmt.Println("come in main()")
defer fmt.Println("out of main()")
slice := []int 5,7,0,9,5
fmt.Println("slice:",slice,"\\tlel:",len(slice))
res := solution(slice)
fmt.Println("afer res:",res)
复杂度分析:
空间复杂度: O(N)
时间复杂度:O(N log N)
以上是关于买卖一次股票的问题----go语言实现的主要内容,如果未能解决你的问题,请参考以下文章