亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中如何根據每日溫度生成一個列表

發布時間:2021-10-26 10:44:43 來源:億速云 閱讀:163 作者:柒染 欄目:編程語言

這篇文章給大家介紹Python中如何根據每日溫度生成一個列表,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

今天的Python學習教程:根據每日溫度生成一個列表,也算是一個實操訓練,伙伴們可以一起動手操練起來了!

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

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

Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0 instead.

For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73], your output should be [1, 1, 4, 2, 1, 1, 0, 0].

提示:氣溫 列表長度的范圍是 [1, 30000]。每個氣溫的值的均為華氏度,都是在 [30, 100] 范圍內的整數。

Note: The length of temperatures will be in the range [1, 30000]. Each temperature will be an integer in the range [30, 100].

解題思路:

最容易想到和理解的就是暴力窮舉,兩個指針,一個指針指向當前溫度,第二指針向后遍歷找到最近一個比當前溫度高的溫度,記錄兩個指針的索引差即可。可以說效率非常低了。

另一種方法是借助棧倒序遍歷原數組,存入較高的溫度的索引,也很容易理解,時間復雜度為 O(n)。其實現邏輯為:

原數組:[73, 74, 75, 71, 69, 72, 76, 73],指針 i 從末尾向前遍歷,返回數組res=[0,0,0,0,0,0,0]
第一次遍歷: i = 7, T[i] = 73, stack = []
 棧為空,res[7] = 0 ,73所在索引7入棧。stack = [7]
第二次遍歷: i = 6, T[i] = 76, stack = [7]
 棧頂對應索引7的溫度T[7]=76,76>73,索引7出棧,此時棧為空,res[6] = 0。索引6入棧,stack = [6]
第三次遍歷: i = 5, T[i] = 72, stack = [6]
 棧頂對應索引6的溫度T[6]=76,72<76,滿足要求,當前索引5入棧。res[5] = 棧頂索引6 - 當前索引5 = 1, stack = [6,5]
第四次遍歷: i = 4, T[i] = 69, stack = [6,5]
 棧頂對應索引5的溫度T[5]=72,69<72,滿足要求,當前索引4入棧。res[4] = 棧頂索引5-當前索引4=1, stack = [6,5,4]
第五次遍歷: i = 3, T[i] = 71, stack = [6,5,4]
 棧頂對應索引的溫度T[4]=69,71>69,棧頂元素出棧。stack = [6,5]
 棧頂對應索引的溫度T[5]=72,滿足要求,當前索引3入棧。res[3] = 棧頂索引5-當前索引3=2, stack = [6,5,3]
第六次遍歷: i = 2, T[i] = 75, stack = [6,5,3]
 棧頂對應索引的溫度T[3]=71,75>71,棧頂元素出棧。stack = [6,5]
 棧頂對應索引的溫度T[5]=72,75>72,棧頂元素出棧。stack = [6]
 棧頂對應索引的溫度T[6]=76,75<76,滿足要求,當前索引2入棧。res[2] = 棧頂索引6-當前索引2=4, stack = [6,2]
第七次遍歷: i = 1, T[i] = 74, stack = [6,2]
 棧頂對應的溫度T[2]=75,滿足要求,當前索引1入棧。res[1] = 2-1=1, stack = [6,2,1]
第八次遍歷: i = 0, T[i] = 73, stack = [6,2,1]
 棧頂對應的溫度T[1]=74,滿足要求,當前索引0入棧。res[0] = 1-0=1, stack = [6,2,1,0]
遍歷結束: res = [1,1,4,2,1,1,0,0]

這種方法下,棧存入索引對應的溫度值始終按升序排列,當棧為空時,證明當前溫度為 從該溫度向后的所有溫度里 最大的。

Java:

class Solution {
 public int[] dailyTemperatures(int[] T) {
 int len=T.length;
 int[] res = new int[len];
 Stack<Integer> stack = new Stack<>();//初始化棧
 for (int i = len - 1; i >= 0; i--) {
 while (!stack.isEmpty() && T[stack.peek()] <= T[i]) {
 stack.pop();
 }
 if (stack.isEmpty()) res[i] = 0;
 else res[i] = stack.peek() - i;
 stack.push(i);
 }
 return res;
 }
}

事實上就這道題而言這并不是一個好方法,因為提示已經明確規定了數據范圍:

列表長度的范圍是 [1, 30000]。每個氣溫的值的均為華氏度,都是在 [30, 100] 范圍內的整數。

最多30000個數據量,數據非常小,入棧出棧,獲取棧頂元素,判斷棧是否空,在數據量很少的情況下這些函數反復調用,相對就占用了很多運行時間,其最終評測運行總時間為 109 ms。那么如何優化?

由于所有數據值的范圍均在30到100之間,那么意為著按升序排列溫度的棧的大小 最大不會超過71(因為從30到100只有71個元素)。那就可以不用棧這個需要反復調用函數的數據結構。直接用長度為71的數組順序存入索引即可,定義一個指針,索引減一代替出棧,索引加一并賦值代替入棧,索引是否溢出代替判斷棧是否為空,無虛函數調用。

優化后:

總運行時間為 4ms,降低了105毫秒

class Solution {
 public int[] dailyTemperatures(int[] T) {
 int len = T.length;
 int[] res = new int[len], stack = new int[71];
 int index = -1;
 for (int i = len - 1; i >= 0; i--) {
 while (index >= 0 && T[stack[index]] <= T[i]) {
 index--;
 }
 if(index >= 0) res[i] = stack[index] - i;
 stack[++index] = i;
 }
 return res;
 }
}

Python:

python并沒有隊列、棧這種數據結構,因為數組就可以做到先進先出、后進先出等操作。

class Solution:
 def dailyTemperatures(self, T: List[int]) -> List[int]:
 tLen = len(T)
 stack = []
 res = [0] * tLen
 for i in range(tLen - 1, -1, -1):
 while stack and T[i] >= T[stack[-1]]:
 stack.pop()
 if stack: res[i] = stack[-1] - i
 stack.append(i)
 return res

關于Python中如何根據每日溫度生成一個列表就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卓资县| 秦皇岛市| 南皮县| 梁平县| 鲜城| 桦南县| 东乌| 方城县| 封开县| 孙吴县| 中超| 鹤峰县| 许昌市| 鄂伦春自治旗| 伊宁县| 祁东县| 伊通| 故城县| 循化| 开封县| 罗定市| 从江县| 若尔盖县| 钟山县| 青州市| 涟水县| 静乐县| 克东县| 花莲市| 洛宁县| 高邑县| 巴马| 南召县| 阳曲县| 罗山县| 阿鲁科尔沁旗| 调兵山市| 铜梁县| 内丘县| 邹平县| 兰州市|