/**假設乙個固定大小為w的視窗,依次劃過arr,假設每次返回最大數,
* * @param arr = [4,3,5,4,3,3,6,7]
* @param w = 3
* @return
*/public static int getres(int arr,int w)
//建立雙端佇列, 其中放的位置是arr[i],頭代表(大->小)尾 l----r l表示左邊第乙個元素下標,r表示右邊第乙個元素下標
linkedlistlinkedlist = new linkedlist<>();
//值的個數
intres = new int[arr.length - w + 1];
int index = 0;
for (int i = 0;i[i]視窗的時候,i就是r
//當從r->放值的時候,可以放在比他大的數後,或者空
while(!linkedlist.isempty() && arr[linkedlist.peeklast()] <= arr[i])
//新增數字
linkedlist.addlast(i);
//當新增的數字小於 如果沒有形成w的長度時候,不讓彈出,i-w 表示過期下標
if (linkedlist.peekfirst() == i- w )
//滿足條件 塞值
if (i >= w-1)
}return res;
}public static void main(string args) ;
int arrs = getres(arr,3);
for (int i = 0; i
`
查詢鍊錶最大值 鍊錶排序
分步驟解決 1 初始化鍊錶,建立頭結點 2 根據輸入建立鍊錶 link create link l 此處採用尾插法即可,直接在create函式中輸入並以此插入到尾節點後 3 查詢出最大值並從鍊錶中刪除之link find delete max link l 4 最有難度的乙個,在已存在鍊錶的基礎上進...
滑動視窗的最大值 雙端佇列
題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 思路 使用暴力求解方法,複雜度為o nk 想到之前使用棧求最小值的演算法,但是棧只能一段刪除資料,所以使用兩端佇列...
雙棧佇列實現快速獲取佇列最大值最小值
1 思路 自己實現乙個棧,其中成員為標準庫中的棧,乙個存放全部的元素,乙個存放最小元素,乙個存放最大元素。使用自己實現的棧來實現乙個求最大值最小值的佇列,其中包含兩個成員,乙個作為出隊的棧,乙個作為入隊的棧。2 c 實現 include include include using namespace...