买卖一次股票的问题----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语言实现的主要内容,如果未能解决你的问题,请参考以下文章

买卖一次股票的问题----go语言实现

LeetCode 腾讯精选50题-- 买卖股票的最佳时机 II

股票收益问题

LeetCode ---- 买卖股票系列问题思路与题解

LeetCode ---- 买卖股票系列问题思路与题解

数组121. 买卖股票的最佳时机