Zeitlimit: 1000 ms
Speicherlimit: 256 MB
Themenbeschreibung:
Xiaoqing spielt gerne Spiele und beobachtet den Marktpreis der Ausrüstung, aber der Preis der Ausrüstung wird nicht jeden Tag festgelegt. Bitte erstellen Sie eine Liste auf Basis der tagesaktuellen Gerätepreisliste neu, und die Ausgabe der entsprechenden Position muss sein: um einen höheren Gerätepreis einzuhalten, mindestens die Anzahl der zu wartenden Tage. Wenn der Artikelpreis danach nicht steigt, verwenden Sie stattdessen 0.
Beschreibung eingeben:
Preis-Array
Ausgangsbeschreibung:
Reihe von Tagen zu beobachten
Beispiel:
Beispiel 1
betreten
73,74,75,71,69,72,76,73
Ausgang
1,1,4,2,1,1,0,0
Beispiel 2
betreten
30,40,50,60
Ausgang
1,1,1,0
Hinweis
1 <= Preisliste.Länge <= 105
30 <= Preisliste[i] <= 100
Brute-Force-Cracking bekommt halbe Punkte
Fall Analyse:
Diese Frage untersucht hauptsächlich die Art des Stapels
Es gibt eine Methode stack.peek ( ) : kann zum obersten Element zurückkehren, löscht aber nicht das oberste Element
Ideen:
-
Öffnen Sie ein Array, um die Anzahl der Tage zu speichern
-
Öffnen Sie eine Deque
-
Der Index des ersten Elements wird in den Stack geschoben und dann die Größe des späteren Elements
stack[进栈的坐标]
mitstack[栈顶坐标]
. Wenn es größer als die Oberseite desstack
Stacks ist, aktualisieren Sie das Array days, notieren Sie die Differenz in Tagen und entfernen Sie das oberstes Element des Stapels (pop()) (kurz gesagt, wenn es kleiner alsstack[进栈的]
ist, entferne es, wenn es größer alsstack[进栈的]
ist, drücke es hineinstack[进栈的]
)
Demo
Code:
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;
}
}