算法|239. 滑動(dòng)窗口最大值漆腌、前 K 個(gè)高頻元素

239. 滑動(dòng)窗口最大值

題目連接:https://leetcode.cn/problems/sliding-window-maximum/
思路一:使用單調(diào)隊(duì)列簿透,從小到大姥饰,不停的pop(val); 不停的push(val)羹令,在peek的值都是要獲取的值
pop(val):如果隊(duì)列頭元素正是當(dāng)前的最大值鲤屡,則彈出poll()這個(gè)值
push(val):判斷隊(duì)尾的元素比當(dāng)前值小則直接彈出,最后添加這個(gè)值
peek:獲取隊(duì)列頭的元素

class Solution {
    public class MyQueue {
        private ArrayDeque<Integer> queue = new ArrayDeque<>();
        public void pop(int val) {
            if (!queue.isEmpty() && val == queue.peek()) {
                queue.poll();
            }
        }

        public void add(int val) {
            while (!queue.isEmpty() && val > queue.peekLast()){
                queue.pollLast();
            }
            queue.offer(val);
        }
        
        public int peek() {
            return queue.peek();
        }
    }
    public int[] maxSlidingWindow(int[] nums, int k) {
        MyQueue queue = new MyQueue();
        int[] result = new int[nums.length - k + 1];
        for (int i = 0; i < k; i++) {
            queue.add(nums[i]);
        }
        int index = 0;
        result[index++] = queue.peek();
        for (int i = k; i < nums.length; i++){
            System.out.println(i - k);
            queue.pop(nums[i - k]);
            queue.add(nums[i]);
            result[index++] = queue.peek();
        }
        return result;
    }
}

思路二福侈、原理和思路一同樣酒来,不過此方法queue存放的是索引

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        int len = nums.length;
        int[] result = new int[len - k + 1];
        ArrayDeque<Integer> queue = new ArrayDeque<>();
        int index = 0;
        for (int i = 0; i < len; i++){
            if (!queue.isEmpty() && queue.peek() == i - k) {
                queue.poll();
            }
            while (!queue.isEmpty() && nums[queue.peekLast()] < nums[i]) {
                queue.pollLast();
            }
            queue.offer(i);
            if (i >= k - 1) {
                result[index++] = nums[queue.peek()];
            }
        }
        return result;
    }
}

347. 前 K 個(gè)高頻元素

題目連接:https://leetcode.cn/problems/top-k-frequent-elements/
思路:先使用hashMap統(tǒng)計(jì)頻率,肪凛,然后使用最小堆堰汉,小于k的時(shí)候一直添加,如果=k的時(shí)候伟墙,在往里面添加的時(shí)候翘鸭,看當(dāng)前要添加的元素比堆頂?shù)淖钚≡剡€大的時(shí)候,就將最小堆頂?shù)脑貜棾龃量诎研略靥砑舆M(jìn)去就乓。然后遍歷一次彈出最小堆

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        int[] result = new int[k];
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
        }
        PriorityQueue<int[]> queue = new PriorityQueue<>((e1, e2)->e1[1] - e2[1]);
        for (Map.Entry<Integer, Integer> entry:map.entrySet()){
            int key = entry.getKey();
            int value = entry.getValue();
            System.out.println(key + " " + value);
            if (queue.size() < k) {
                queue.add(new int[]{key, value});
            } else {
                if (queue.peek()[1] < value) {
                    queue.poll();
                    queue.add(new int[]{key, value});
                }
               
            }
        }
        for (int i = k - 1; i >= 0; i--) {
            result[i] = queue.poll()[0];
        }
        return result;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拱烁,隨后出現(xiàn)的幾起案子生蚁,更是在濱河造成了極大的恐慌,老刑警劉巖戏自,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邦投,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浦妄,警方通過查閱死者的電腦和手機(jī)尼摹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剂娄,“玉大人,你說我怎么就攤上這事玄呛≡呐常” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵徘铝,是天一觀的道長(zhǎng)耳胎。 經(jīng)常有香客問我惯吕,道長(zhǎng),這世上最難降的妖魔是什么怕午? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任废登,我火速辦了婚禮,結(jié)果婚禮上郁惜,老公的妹妹穿的比我還像新娘堡距。我一直安慰自己,他們只是感情好兆蕉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布羽戒。 她就那樣靜靜地躺著,像睡著了一般虎韵。 火紅的嫁衣襯著肌膚如雪易稠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天包蓝,我揣著相機(jī)與錄音驶社,去河邊找鬼。 笑死测萎,一個(gè)胖子當(dāng)著我的面吹牛衬吆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绳泉,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼逊抡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了零酪?” 一聲冷哼從身側(cè)響起冒嫡,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎四苇,沒想到半個(gè)月后孝凌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡月腋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年蟀架,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榆骚。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡片拍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出妓肢,到底是詐尸還是另有隱情捌省,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布碉钠,位于F島的核電站纲缓,受9級(jí)特大地震影響卷拘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祝高,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一栗弟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧工闺,春花似錦乍赫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至遍搞,卻和暖如春罗侯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背溪猿。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工钩杰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诊县。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓讲弄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親依痊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子避除,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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