[Java Q]プログラマー-株価
9950 ワード
考えやすいのは難しい答えだと思います.
に答える以前の価格より高い場合は、インデックスがキューに格納されます.
1-1. 価格が下がると
1-2. スタックを削除します. スタック上の残りの価格指数は下がらなかった.
2-1. 全長-索引を正解配列に格納します. 完全なコード0秒はもちろん離れられず、インデックスが保存されている. 1秒から先の価格と比較する.価格が以前より高ければ、インデックスをスタックに積み上げます. 低価格であれば、回答配列に格納 堅調な価格ex)1秒から最後(4秒)まで維持すると、4-1=3秒が正解配列の1秒インデックスに格納されます. 格納時-1の理由は、配列が1からではなく0から始まるためです.
に答える
1-1. 価格が下がると
1-2. スタックを削除します.
2-1. 全長-索引を正解配列に格納します.
import java.util.Stack;
class Solution {
public int[] solution(int[] prices) {
int[] answer = new int[prices.length];
Stack<Integer> st = new Stack<>();
for(int i = 0; i < prices.length; i++) {
while(!st.isEmpty() && prices[i] < prices[st.peek()]) {
answer[st.peek()] = i - st.peek();
st.pop();
}
st.push(i);
}
while (!st.isEmpty()) {
answer[st.peek()] = prices.length - st.peek() - 1;
st.pop();
}
return answer;
}
}
値を下げるfor(int i = 0; i < prices.length; i++) {
while(!st.isEmpty() && prices[i] < prices[st.peek()]) {
answer[st.peek()] = i - st.peek();
st.pop();
}
st.push(i);
}
현재 시간 - 스택 최상위 인덱스(마지막으로 높았던 가격)
、현재 시간 - 스택 peek() 값
現在の価格が高い時点まで繰り返します.while (!st.isEmpty()) {
answer[st.peek()] = prices.length - st.peek() - 1;
st.pop();
}
Reference
この問題について([Java Q]プログラマー-株価), 我々は、より多くの情報をここで見つけました https://velog.io/@gonudayo/Java-큐-프로그래머스-주식가격テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol