正確的解法是使用雙端佇列來處理這個window的功能。
c++ deque有現成的stl可以使用
需要注意幾個點
1. 需要維護佇列內部的最大值在隊首的位置,每次想要新增乙個新元素的時候就迴圈和前面的元素做比較
2. 判斷乙個元素是否過期,可以直接用當前隊首和應該淘汰的數字進行對比如果一致就去除
主要邏輯:
1. 如果該資料小於新加入的資料,再上一步就應該被清除所以不需要考慮過期的問題
2. 如果當前的資料大於新加入的資料,但是又恰好等於i -k這個位置的資料,那麼在確定最大值之前就需要將它清理出來
/*
* * [239] 滑動視窗最大值
* 使用deque雙端佇列的方法來解決,效率比較低
*/// @lc code=start
class solution ;
vectorret;
dequewindow;
window.push_front(nums[0]);
for (int i = 1; i < nums.size() ; i++)
window.push_back(nums[i]);
//window front用來判斷是否是過期的資料,如果有重複資料也應該被前面迴圈所去除
if (i >= k && window.front() == nums[i - k])
if (i >= k - 1)
}
return ret;
}};// @lc code=end
deque的效能確實不怎麼的,如果可以還是用資料效率比較高,但是容器就是勝在了方便 leetcode刷題筆記239
這是一道hard的題目,但是我覺得沒有想象的那麼難,大概在中等難度,主要是要搞清楚一些東西,譬如優先順序佇列等,還有一點比較重要的需要搞清楚,我會在下邊提及,這道題不僅僅是讓我學到演算法,也讓我重視起對於stl的使用。給你乙個整數陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的...
Leetcode Python 刷題技巧之滑動視窗
總結 示例 pandas 是基於numpy 的一種工具,該工具是為了解決資料分析任務而建立的。如下 示例 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns impo...
Leetcode刷題之括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...