窗口最大值)
題目給你一個(gè)整數(shù)數(shù)組nums有一個(gè)大小為k的滑動(dòng)窗口從數(shù)組的最左側(cè)移動(dòng)到數(shù)組的最右側(cè)。你只可以看到在滑動(dòng)窗口內(nèi)的k個(gè)數(shù)字?;瑒?dòng)窗口每次只向右移動(dòng)一位。返回滑動(dòng)窗口中的最大值。示例 1輸入nums [1,3,-1,-3,5,3,6,7], k 3輸出[3,3,5,5,6,7]解釋滑動(dòng)窗口的位置 最大值 --------------- ----- [1 3 -1] -3 5 3 6 731 [3 -1 -3] 5 3 6 731 3 [-1 -3 5] 3 6 751 3 -1 [-3 5 3] 6 751 3 -1 -3 [5 3 6] 761 3 -1 -3 5 [3 6 7]7示例 2輸入nums [1], k 1輸出[1]提示1 nums.length 105-104 nums[i] 1041 k nums.length題解class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int n nums.length; int[] res new int[n - k 1];//總共有n-k1個(gè)滑動(dòng)窗口 DequeInteger deque new ArrayDeque();//雙端隊(duì)列存數(shù)組下標(biāo) for(int i 0;i n;i){ //移除所有比當(dāng)前元素小的隊(duì)尾元素下標(biāo) while(!deque.isEmpty() nums[i] nums[deque.peekLast()]){ deque.pollLast(); } deque.offerLast(i); //i-k1是滑動(dòng)窗口左邊界隊(duì)首超界移出 if(deque.peekFirst() i - k 1){ deque.pollFirst(); } if(i k - 1){//已經(jīng)形成第一個(gè)完整窗口可以記錄最大值 res[i - k 1] nums[deque.peekFirst()];//隊(duì)首下標(biāo)對應(yīng)的數(shù)值就是當(dāng)前窗口最大值 } } return res; } }