兩種方法:
方法一:優化後的暴力搜尋
正常暴力搜尋,就是遍歷陣列,對於每個溫度向後查詢到第乙個高於當前溫度的日期,對應的日期差即距離
優化後的暴力搜尋
從後往前遍歷,對於當前日期的溫度也是向後查詢到第乙個高於當前溫度的日期
優化步驟:
用乙個變數a記錄當前遇到的最高溫度,這樣可以用來減小不必要的搜尋
用乙個陣列b記錄要想觀測到更高的氣溫,至少需要等待的天數
用乙個陣列c記錄下乙個更高氣溫對應的溫度,這樣減小重複搜尋
vectordailytemperatures(vector& t) else if(index[i+1] == 0)else{
int j = i+1; //j永遠是當前i的下一天
bool flag = false;
for(;jif(temper[j] > t[i]){
index[i]+=(index[j]+1);
temper[i] = temper[j];
flag = true;
break;
if(!flag)
index[i]+=(index[j]);
j+=(index[j]-1);
return index;
方法二:用棧記錄沒有訪問過但還沒找到更高溫度的溫度,複雜度為o(n)
從前往後遍歷,將還沒有找到更高溫度的日期入棧,並且棧中溫度高的放下面,溫度低的放上面
每次都判斷棧頂元素是否找到了更高的溫度,更新
vectordailytemperatures(vector& t) {
vectorindex(t.size(),0);
stackdesc_st;
desc_st.push(0);
for(int i=1;iwhile(!desc_st.empty() && t[i] > t[desc_st.top()]){
index[desc_st.top()] = (i-desc_st.top());
desc_st.pop();
desc_st.push(i);
return index;
結論:方法一 優於方法二
LeetCode 739 每日溫度
根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入 0 來代替。例如,給定乙個列表 temperatures 73,74,75,71,69,72,76,73 你的輸出應該是 1,1,4,2,1,1,0,0 static con...
LeetCode 739 每日溫度
根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入 0 來代替。例如,給定乙個列表 temperatures 73,74,75,71,69,72,76,73 你的輸出應該是 1,1,4,2,1,1,0,0 從後一天往前一天推,...
leetcode739 每日溫度
即找之後第乙個比自己大的元素 參考 用棧實現 將元素 下標 依次入棧並且保證棧內元素從棧頂到棧底是遞增的。如果當前元素比棧頂元素大,則說明當前元素就是比棧頂元素大的第乙個元素,求出兩個下標的差值即為棧頂元素對應的結果。依次出棧並計算下標差直到棧頂元素大於當前元素,將當前元素入棧 比如 t 73,74...