[Java Q]プログラマー-株価


考えやすいのは難しい答えだと思います.
に答える
  • 以前の価格より高い場合は、インデックスがキューに格納されます.
    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);
    }
  • 0秒はもちろん離れられず、インデックスが保存されている.
  • 1秒から先の価格と比較する.価格が以前より高ければ、インデックスをスタックに積み上げます.
  • 低価格であれば、回答配列に格納현재 시간 - 스택 최상위 인덱스(마지막으로 높았던 가격)현재 시간 - 스택 peek() 값現在の価格が高い時点まで繰り返します.
  • 堅調な価格
    while (!st.isEmpty()) {
    	answer[st.peek()] = prices.length - st.peek() - 1;
    	st.pop();
    }
  • ex)1秒から最後(4秒)まで維持すると、4-1=3秒が正解配列の1秒インデックスに格納されます.
  • 格納時-1の理由は、配列が1からではなく0から始まるためです.