回转寿司

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

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String[] pricestring = sc.nextLine().trim().split("[ ]");
        int[] prices = new int[pricestring.length];
        for(int i = 0;i < prices.length;i++){
            prices[i] = Integer.parseInt(pricestring[i]);
        }
        //单调栈
        Deque<Integer> price = new ArrayDeque<>();
        //记录结果数组
        int[] res = Arrays.copyOf(prices,prices.length);
        
        for(int i = 0;i < res.length;i++){
            //送小的,所以右边比左边大或等入栈
            while(!price.isEmpty()&&prices[price.peek()] > prices[i]){
                int index = price.pop();
                res[index] = prices[index] + prices[i]; 
            }
            price.push(i);
        }
        
        //后半部分没找到的,需要从前面寻找
        while(!price.isEmpty()){
            int index = price.pop();
            for(int i = 0;i < index;i++){
                if(prices[index] > prices[i]){
                    res[index] = prices[index] + prices[i]; 
                    break;
                }
            }
        }
        
        for(int i = 0;i < res.length;i++){
            System.out.print(res[i] + " ");
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容