1. 程式人生 > >LeetCode學習記錄(5)----每日溫度

LeetCode學習記錄(5)----每日溫度

根據每日 氣溫 列表,請重新生成一個列表,對應位置的輸入是你需要再等待多久溫度才會升高的天數。如果之後都不會升高,請輸入 0 來代替。

例如,給定一個列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的輸出應該是 [1, 1, 4, 2, 1, 1, 0, 0]

提示:氣溫 列表長度的範圍是 [1, 30000]。每個氣溫的值的都是 [30, 100] 範圍內的整數。

解題思路:先將輸入的溫度列表放入棧中,然後棧跟輸入列表進行比較,遇到比自己大的就pop。

public int[] dailyTemperatures(int[] temperatures) {
		Stack<Integer> s=new Stack<>();
		int length=temperatures.length;
		int[] dailyLog=new int[length];
		int temp;
		for(int i=length-2;i>=0;i--) {	
			s.push(temperatures[i]);//入棧
		}
		while(!s.empty()) {
			for(int i=0;i<length-1;i++) {
				int count=0;
				dailyLog[i]=count;
				temp=s.size();//記錄當前棧大小
				for(int j=i;j<length-1;j++) {
					count++;
					//從下一天開始比較
				if(s.peek()<temperatures[j+1]) {
					dailyLog[i]=count;
					s.pop();
					break;
				}
			}
			if(temp==s.size()) {//表示沒有比當前溫度大的溫度,需要pop一下自己
				s.pop();
			}	
		  }
		}
		return dailyLog;   
	    }