雙端鍊錶實現最大值獲取(基礎演算法一)

2021-10-08 23:12:17 字數 838 閱讀 3760

/**假設乙個固定大小為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...