package main import "fmt" func main() { /* 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。 示例 2: 输入: [1,2,3,4,5] 输出: 4 解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。 因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。 示例 3: 输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。 */ /* 任意一天买入,之后的任意一天卖出 之后还可以买入和卖出 */ slice := []int{7, 1, 5, 3, 6, 4} ticket(slice) } func ticket(s []int) { for i := 0; i < len(s); i++ { //买入 buy := s[i] //卖出 if len(s[i+1:]) == 0 { //利润 num := - buy fmt.Println("利润:", num) } else { for j := 0; j < len(s[i+1:]); j++ { sell := s[i+1:][j] //利润 num := sell - buy fmt.Println("利润:", num) //继续买入和卖出 newslice := s[i+1:][j+1:] ticket(newslice) } } } } //有待完善!!!