根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高超過該日的天數。如果之後都不會公升高,請在該位置用 0 來代替。
輸入資料
[73,74,75,71,69,72,76,73]
期望資料
[1,1,4,2,1,1,0,0]
此種找到乙個數大的值的第乙個數問題,就是明擺著告訴你要用到單調棧
其實使用兩次迴圈也可以,但是複雜度高,容易答題失敗
什麼是單調棧
就是乙個棧,裡面的元素的大小按照他們所在棧內的位置,滿足一定的單調性
本題如何利用單調棧
維護乙個單調遞減的stack,stack內部存的是原陣列的每個index。
每當我們遇到乙個比當前棧頂所對應的數大的數的時候,我們就遇到了乙個「大數「。這個」大數「比它之前多少個數大我們不知道,但是至少比當前棧頂所對應的數大。
我們彈出棧內所有對應數比這個數小的棧內元素,並更新它們在返回陣列中對應位置的值。
因為這個棧本身的單調性,當我們棧頂元素所對應的數比這個元素大的時候,我們可以保證,棧內所有元素都比這個元素大。
對於每乙個元素,當它出棧的時候,說明它遇到了自己的next greater element,我們也就要更新redult陣列中的對應位置的值。如果乙個元素一直不曾出棧,那麼說明不存在next greater element,我們也就不用更新result陣列了
class solution
q.push(i);
}return result;
}};
739 每日溫度
題目描述 根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高的天數。如果之後都不會公升高,請輸入 0 來代替。例如,給定乙個列表 temperatures 73,74,75,71,69,72,76,73 你的輸出應該是 1,1,4,2,1,1,0,0 氣溫 列表...
739每日溫度
題目描述 題解思路 我的第一思路就是暴力破解,雙迴圈,從當前結點往後遍歷,找到第乙個大於他的數,然後用count計數,但是這種方法時間複雜度o n2 最後超時,後來優化了一下,如果當前數字和前乙個數字相同,則利用上一次資料 1即可。int dailytemperatures int t,int ts...
739 每日溫度
根據每日 氣溫 列表,請重新生成乙個列表,對應位置的輸入是你需要再等待多久溫度才會公升高超過該日的天數。如果之後都不會公升高,請在該位置用 0 來代替。例如,給定乙個列表 temperatures 73,74,75,71,69,72,76,73 你的輸出應該是 1,1,4,2,1,1,0,0 cla...