【Go】单调栈

寿司店周年庆,正在举办优惠活动只回馈新老客户寿司转盘上总共有n盘寿司,prices 是第i盘寿司的价格,如果客户选择了第i密寿司,寿司店免费赠送客户距离第i盘寿司最近的下一盘寿可j,前提是 pricesm< pricesū,如果没有满足条件的ì,则不赠送寿司。
每个价格的寿司都可无限供应。
输入描述
输入的每一个数字代表每盘寿司的价格,每盘寿司的价格之间使用空格分隔寿司的盘数 n范围为:1<=n <= 500
输出描述
输出享受优惠后的一组数据,每个值表示客户选择第i盘寿司时实际得到的寿司的总价格。使用空格进行分隔。
示例1:
输入:
3 15 6 14
输出:
3 21 9 17

点击查看代码
func main() {
	s := []int{3, 15, 6, 14}
	res := make([]int, 4)
	stack := make([]int, 0)
	l := len(s)
//环形数组处理
	for i := l*2 - 1; i >= 0; i-- {
		for len(stack) > 0 && stack[len(stack)-1] >= s[i%l] {
			stack = stack[0 : len(stack)-1]
		}
		if len(stack) == 0 {
			res[i%l] = s[i%l]
		} else {
			res[i%l] = s[i%l] + stack[len(stack)-1]
		}
		stack = append(stack, s[i%l])
	}
	for _, v := range res {
		fmt.Printf("%d ", v)
	}

}

posted @ 2024-04-11 10:36  爱炎峰  阅读(34)  评论(0)    收藏  举报