滑動(dòng)窗口求最大值數(shù)組

【題目】給出一個(gè)整形數(shù)組立宜,例如arr = {5,4,3,5,6,7,6}站叼,窗口大小為w=3充易,窗口每次向右移動(dòng)一位,輸出每個(gè)窗口中最大值組成的數(shù)組裁着。

package string;

import com.google.common.collect.Lists;

import java.util.Deque;
import java.util.LinkedList;
import java.util.Random;

/**
 * Created by cqs on 2018/3/17.
 */
public class MaxArray {

    private static Random random = new Random();


    public static void main(String[] args) {
//        int[] a = {4, 3, 5, 4, 3, 3, 6, 7};
        Integer[] a = {5, 4, 3, 5, 6, 7, 6};
        a = randArr(10);
        int windows = 3;
        Integer[] result = getMaxArray(a, windows);
        System.out.println(Lists.newArrayList(result));

    }

    /**
     * 使用雙端隊(duì)列存儲(chǔ)數(shù)組索引
     * 隊(duì)首是當(dāng)前最大的值
     * <p>
     * <p>
     * 遍歷數(shù)組的時(shí)候 當(dāng)下一個(gè)數(shù)的值小于隊(duì)尾時(shí)候添加到隊(duì)列尾部
     * 當(dāng)下一個(gè)數(shù)X大于等于隊(duì)尾時(shí) 刪除隊(duì)尾元素  并繼續(xù)和新的隊(duì)尾比較 直到不大于隊(duì)尾元素或者隊(duì)列為空
     * 然后添加X(jué)的索引到隊(duì)列尾部
     * <p>
     * 將隊(duì)列首部元素(索引)對(duì)應(yīng)數(shù)組的值存儲(chǔ)到結(jié)果數(shù)組中
     * <p>
     * 隊(duì)列最多windows個(gè)元素 當(dāng)隊(duì)列超過(guò)windows個(gè)元素時(shí) 隊(duì)首元素過(guò)期了 (窗口已經(jīng)劃過(guò)了) 需要?jiǎng)h除隊(duì)首元素
     */
    private static Integer[] getMaxArray(Integer[] a, int windows) {
        if (a == null || a.length < windows) return null;
        Deque<Integer> queue = new LinkedList<>();
        //處理第1個(gè)元素 至第windows -1個(gè)元素
        queue.add(0);
        for (int i = 1; i < windows - 1; i++) {
            int fIndex = queue.getFirst();
            if (a[i] > a[fIndex]) {
                queue.removeFirst();
                queue.addFirst(i);
            }
        }
        //從第windows個(gè)元素開始 每次求出一個(gè)窗口最大值
        Integer[] result = new Integer[a.length - windows + 1];
        for (int i = windows - 1; i < a.length; i++) {
            //a[i]大于等于隊(duì)尾的話 刪除隊(duì)尾元素 直到隊(duì)尾元素大于a[i] 或者隊(duì)列為空
            while (queue.size() > 0 && a[queue.getFirst()] <= a[i]) {
                queue.removeLast();
            }
            //隊(duì)尾添加
            queue.addLast(i);
            int fIndex = queue.getFirst();
            result[i - windows + 1] = a[fIndex];
            if (i - windows + 1 >= fIndex) { //本輪中窗口劃過(guò)隊(duì)首元素
                queue.removeFirst();
            }
        }
        return result;
    }

    private static Integer[] randArr(int size) {
        Integer[] as = new Integer[size];
        for (int i = 0; i < size; i++) {
            as[i] = random.nextInt(100 * size);
        }
        System.out.println(Lists.newArrayList(as));
        return as;
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末繁涂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子二驰,更是在濱河造成了極大的恐慌扔罪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桶雀,死亡現(xiàn)場(chǎng)離奇詭異矿酵,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)矗积,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門全肮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人漠魏,你說(shuō)我怎么就攤上這事倔矾。” “怎么了柱锹?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵哪自,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我禁熏,道長(zhǎng)壤巷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任瞧毙,我火速辦了婚禮胧华,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宙彪。我一直安慰自己矩动,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布释漆。 她就那樣靜靜地躺著悲没,像睡著了一般。 火紅的嫁衣襯著肌膚如雪男图。 梳的紋絲不亂的頭發(fā)上示姿,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天甜橱,我揣著相機(jī)與錄音,去河邊找鬼栈戳。 笑死岂傲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的子檀。 我是一名探鬼主播镊掖,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼命锄!你這毒婦竟也來(lái)了堰乔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脐恩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后侦讨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驶冒,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年韵卤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骗污。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沈条,死狀恐怖需忿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蜡歹,我是刑警寧澤屋厘,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站月而,受9級(jí)特大地震影響汗洒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜父款,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一溢谤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憨攒,春花似錦世杀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至包晰,卻和暖如春湿镀,著一層夾襖步出監(jiān)牢的瞬間炕吸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工勉痴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赫模,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓蒸矛,卻偏偏與公主長(zhǎng)得像瀑罗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雏掠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 題目 有一個(gè)整型數(shù)組 arr 和一個(gè)大小為 w 的窗口從數(shù)組的最左邊滑到最右邊,窗口每次向右邊滑一個(gè)位置斩祭。 返回一...
    IT_Matters閱讀 2,439評(píng)論 0 3
  • 題目 有一個(gè)整型數(shù)組arr和一個(gè)大小為w的窗口從數(shù)組的最左邊滑到最右邊,窗口每次向右邊滑一個(gè)位置乡话。 例如摧玫,數(shù)組為[...
    50fc16abfd49閱讀 1,023評(píng)論 0 1
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,118評(píng)論 0 13
  • 不知是誰(shuí)給你起的芳名 若不親睹您國(guó)色天香的真容 會(huì)誤認(rèn)為您如墨染绑青、黑炭一般 你只是深深的紅诬像、深深的紫……著裝深暗 ...
    蕙蘭漱雪閱讀 406評(píng)論 8 5
  • 你看過(guò)這本書沒(méi)邪乍?《做降狠,就對(duì)了》。不像很多雞血?jiǎng)?lì)志書籍那樣庇楞,這本書簡(jiǎn)單直接的告訴你榜配,有想法就付諸行動(dòng),別想太多...
    小昭妮兒閱讀 174評(píng)論 2 2