寿司店周年庆,正在举办优惠活动只回馈新老客户寿司转盘上总共有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)
}
}