視窗最大值陣列
【題目】給出一個整形陣列,例如arr = {5,4,3,5,6,7,6},視窗大小為w=3,視窗每次向右移動一位,輸出每個視窗中最大值組成的陣列。
[5,4,3,]5,6,7,6 視窗最大值為5
5,[4,3,5,]6,7,6 視窗最大值為5
5,4,[3,5,6,]7,6 視窗最大值為6
5,4,3,[5,6,7,]6 視窗最大值為7
5,4,3,5,[6,7,6] 視窗最大值為7
則輸出的陣列為{5,5,6,7,7};
【解答】對於一個給定的陣列,求得的最終陣列長度可以確定是arr.length - w +1, 本題重點是使用雙端佇列來更新最大值小標,並同時將最大值存入陣列中。保證時間複雜度為O(n)。
程式碼:
public static int[] getWindowMax(int[] arr, int w)
{
if (arr == null || arr.length == 0)
{
return null;
}
LinkedList<Integer> list = new LinkedList<Integer>();
int[] res = new int[arr.length-w+1];
int index = 0;
for (int i = 0; i < arr.length; i++)
{
//保證列表中第一位是最大值下標
while (!list.isEmpty() && arr[list.getLast()] <= arr[i])
{
list.pollLast();
}
list.add(i);
//刪除過期下標
if (list.getFirst() == i - w)
{
list.pollFirst();
}
if (i >= w-1)
{
res[index++] = arr[list.peekFirst()];
}
}
return res;
}
相關文章
- [待]生成視窗最大值陣列陣列
- 【演算法實戰】生成視窗最大值陣列演算法陣列
- JavaScript 陣列最大值JavaScript陣列
- C 陣列最大值陣列
- 滑動視窗最大值——棧與佇列佇列
- JavaScript 獲取陣列中最大值JavaScript陣列
- JavaScript 陣列排序 與 求最大值JavaScript陣列排序
- JavaScript 陣列最大值和最小值JavaScript陣列
- JavaScript 陣列 最大值和最小值JavaScript陣列
- 遞迴求解陣列中的最大值遞迴陣列
- JavaScript陣列最大值和最小值JavaScript陣列
- CoffeeScript攻略4.3:取得陣列最大值陣列
- [劍指offer題解][Java]佇列的最大值/滑動視窗的最大值Java佇列
- js如何獲取陣列中的最大值JS陣列
- 工作列視窗以及其子視窗結構 (轉)
- JavaScript獲取陣列最大值和最小值JavaScript陣列
- LeetCode 410——分割陣列的最大值LeetCode陣列
- JavaScript陣列中的最大值和最小值JavaScript陣列
- JavaScript陣列最大值、最小值和平均數JavaScript陣列
- 獲取陣列中子串乘積的最大值陣列
- 2439. 最小化陣列中的最大值陣列
- javascript獲取陣列中最大值程式碼例項JavaScript陣列
- 求陣列之和,最小值,最大值,平均值陣列
- es6實現獲取陣列中最大值陣列
- 修改陣列【並查集維護集合的最大值、連續數字的最大值】陣列並查集
- js獲取數字陣列最大值的幾種方式JS陣列
- Golang獲取int陣列裡的最大值和下標Golang陣列
- 演算法求陣列中的最大值最小值演算法陣列
- VC++進行視窗列舉C++
- 第二課DOS命令列視窗命令列
- win10如何取消工作列視窗_win10怎麼取消工作列預覽視窗Win10
- [Leetcode]雙項佇列解決滑動視窗最大值難題LeetCode佇列
- C語言函式題-查詢陣列每行的最大值C語言函式陣列
- js獲取陣列元素中的最大值和最小值JS陣列
- 棧和佇列:滑動視窗和陣列變樹問題佇列陣列
- 239. 滑動視窗最大值
- 程式碼隨想錄陣列二刷:長度最小的子陣列(滑動視窗)陣列
- 尋找陣列中的最大值和最小值O(1.5*N)陣列