Цена оборудования

Ограничение по времени: 1000 мс

Лимит памяти: 256M

Описание темы:

  Сяоцин любит играть в игры и наблюдать за рыночной ценой оборудования, но цена оборудования не фиксируется каждый день. Пожалуйста, обновите список на основе ежедневного прайс-листа оборудования, и вывод соответствующей позиции должен быть: для того, чтобы наблюдать более высокую цену оборудования, по крайней мере, количество дней ожидания. Если после этого цена предмета не поднимется, используйте вместо этого 0.

Введите описание:

массив цен

Описание выхода:

набор дней для наблюдения

Пример:

Пример 1

войти

73,74,75,71,69,72,76,73

выход

1,1,4,2,1,1,0,0

Пример 2

войти

30,40,50,60

выход

1,1,1,0

намекать

1 <= priceList.length <= 105

30 <= список цен[i] <= 100

Взлом методом грубой силы получает полбалла

анализ случая:

 Этот вопрос в основном исследует природу стека

 Есть метод stack.peek() : может вернуться к верхнему элементу, но не удаляет верхний элемент

Идеи:

  1. Откройте массив для хранения количества дней

  2. открыть очередь

  3. В стек запихивается индекс первого элемента, а затем сравнивается размер более позднего stack[进栈的坐标]и stack[栈顶坐标]размер, если он больше вершины stackстека , то обновляется массив дней, записывается разница в днях и удаляется верхний элемент стека (pop()) (короче говоря, если он меньше stack[进栈的] , удалите его, если он больше stack[进栈的] , нажмите его stack[进栈的])

демо
вставьте сюда описание изображения

Код:

package 装备价格;

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

/**
 * @author 江七
 * @version 1.0
 * @date 2021/9/30 14:39
 */
public class Main {
    
    
    public static void main(String[] args) {
    
    
        // 如果有其他情况需要判断 可修改示例代码
        Scanner cin = new Scanner(System.in);
        String str1 = cin.next();
        String[] split1 = str1.split(",");
        int[] arr = new int[split1.length];
        for (int i = 0; i < split1.length; i++) {
    
    
            arr[i] = Integer.parseInt(split1[i]);
        }
        int[] dayArr = dailyPrice(arr);
        String result = "";
        for (int day : dayArr) {
    
    
            result += day + ",";
        }
        System.out.println(result.substring(0, result.length() - 1));
    }

    // 请补齐方法
    public static int[] dailyPrice(int[] priceArray) {
    
    
        Stack<Integer> stack = new Stack<>(); //使用
        int length = priceArray.length;
        int[] res = new int[length];
        for(int i=0;i < length;i++){
    
    
            while(stack.size()!=0 && priceArray[stack.peek()] < priceArray[i]){
    
    
                res[stack.peek()] = i-stack.pop();
            }
            stack.push(i);
        }
        return res;
    }
}

Скрин реализации:

рекомендация

отblog.csdn.net/m0_46502538/article/details/120566648