Ausstattungspreis

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:

  1. Öffnen Sie ein Array, um die Anzahl der Tage zu speichern

  2. Öffnen Sie eine Deque

  3. Der Index des ersten Elements wird in den Stack geschoben und dann die Größe des späteren Elements stack[进栈的坐标]mit stack[栈顶坐标]. Wenn es größer als die Oberseite des stackStacks 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 als stack[进栈的] ist, entferne es, wenn es größer als stack[进栈的] ist, drücke es hinein stack[进栈的])

Demo
Bildbeschreibung hier einfügen

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;
    }
}

Screenshot der Implementierung:

Ich denke du magst

Origin blog.csdn.net/m0_46502538/article/details/120566648
Empfohlen
Rangfolge