亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

數組滑動窗口比較最大值

標簽:
Java

         

import java.util.ArrayList;import java.util.Arrays;import java.util.Deque;import java.util.List;import java.util.concurrent.LinkedBlockingDeque;/** * 有一个×××数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右滑动一个位置。 * 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。 *  * 例: * 数组arr=[4,3,5,4,3,3,6,7] w=3,结果为[5,5,5,4,6,7] *  * 常规解连续比较w内的最大数,O(N*w) *  * 最优解O(N) * @author Administrator * */public class CompareArray {	/**	 * 双端队列存放着数组的下标值	 */	private static Deque<Integer> qmax = new LinkedBlockingDeque<Integer>();		public static List dowork(int[] arr,int size) {		List<Integer> l = new ArrayList<Integer>();		for(int i = 0,len = arr.length;i<len;i++) {						//1、如果qmax为空,直接把下标i放入qmax			if(qmax.isEmpty()) {				qmax.push(i);			}else {				//2、如果qmax末尾<=arr[i],则弹出				while(!qmax.isEmpty() && arr[qmax.getLast()]<=arr[i]) {					qmax.removeLast();				}				qmax.push(i);			}						//超过窗口大小的弹出			if(i - qmax.peekLast() == size) {				qmax.removeLast();			}						//拿到窗口内最大值			if(i>=size-1) {				l.add(arr[qmax.peekLast()]);			}		}				return l;	}		public static void main(String[] args) {		int[] i = {4,3,5,4,3,3,6,7};				System.out.println(dowork(i,5));			}}


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
移動開發工程師
手記
粉絲
20
獲贊與收藏
132

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消