买卖一次股票的问题----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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就喝白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值