Skip to content

Latest commit

 

History

History
58 lines (44 loc) · 1.48 KB

63.md

File metadata and controls

58 lines (44 loc) · 1.48 KB

买卖股票的最好时机(一)

题目

假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益 1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天 2.如果不能获取到任何利润,请返回0 3.假设买入卖出均无手续费

要求:空间复杂度 O(1),时间复杂度 O(n)

示例

输入:[8,9,2,5,4,7,1]

返回值:5

说明:在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能选择在第2天买入,第3天卖出,这样就亏损7了;同时,你也不能在买入前卖出股票。

思路

  • 你不能在买入股票前卖出股票
  • 动态规划

实现

package main

import "fmt"

// 买卖股票的最好时机(一)
func main() {
	prices := []int{8, 9, 2, 5, 4, 7, 1}
	res := maxProfit(prices)
	fmt.Println(res)
}

func maxProfit(prices []int) int {
	earn := 0        // 最大收益
	min := prices[0] // 股票对低值
	for k, v := range prices {
		if v < min {
			min = v
		}
		if k == 0 {
			// 第一天没有收入
			earn = 0
		} else {
			// 当天股票值减去最低股票值就是今天的预期最大收益,再和历史的最大收益值比较,选择较大的
			if (v - min) > earn {
				earn = v - min
			}
		}
	}
	return earn
}