zoukankan      html  css  js  c++  java
  • 239. Sliding Window Maximum

    Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.

    For example,
    Given nums = [1,3,-1,-3,5,3,6,7], and k = 3.

    Window position                Max
    ---------------               -----
    [1  3  -1] -3  5  3  6  7       3
     1 [3  -1  -3] 5  3  6  7       3
     1  3 [-1  -3  5] 3  6  7       5
     1  3  -1 [-3  5  3] 6  7       5
     1  3  -1  -3 [5  3  6] 7       6
     1  3  -1  -3  5 [3  6  7]      7
    

    Therefore, return the max sliding window as [3,3,5,5,6,7].

    Note: 
    You may assume k is always valid, ie: 1 ≤ k ≤ input array's size for non-empty array.

    Follow up:
    Could you solve it in linear time?

    Similar:

    76. Minimum Window Substring

    155. Min Stack

    159. Longest Substring with At Most Two Distinct Characters

    265. Paint House II

     1 Solution 1. Priority Queue
     2 public class Solution {
     3     class Pair implements Comparable<Pair>{
     4         public int key;
     5         public int idx;
     6         
     7         public Pair(int k, int id) {
     8             this.key = k;
     9             this.idx = id;
    10         }
    11         
    12         @Override
    13         public int compareTo(Pair p) {
    14             return this.key < p.key ? 1 : (this.key == p.key ? 0 : -1); // reverse order, from Large to Small
    15         }
    16     }
    17     
    18     public int[] maxSlidingWindow(int[] nums, int k) {
    19         if (nums.length == 0 || k <= 0) return new int[0];
    20         
    21         PriorityQueue<Pair> que = new PriorityQueue<Pair>();
    22         int[] ret = new int[nums.length - k + 1];
    23         int i = 0;
    24         
    25         for (i = 0; i < nums.length; i++) {
    26             que.add(new Pair(nums[i], i));
    27             while (que.peek().idx < i - k + 1) {
    28                 que.poll();
    29             }
    30             if (i >= k-1) {
    31                 ret[i-k+1] = que.peek().key;
    32             }
    33         }
    34         
    35         return ret;
    36     }
    37 }
  • 相关阅读:
    怎么获取pm2.5数据----pm2.5 的获取 java 通过url获取后,得到json 格式,在解析json
    MVC介绍
    如何通过URL获取天气PM2.5的数据,返回json
    23种设计模式
    xxx系统的6大质量属性战术
    作业04.提升系统性能
    淘宝网的质量属性分析
    架构漫谈读后感
    软件架构师工作流程----装修与软件的联系
    软件构架实践阅读笔记五(读后感)
  • 原文地址:https://www.cnblogs.com/joycelee/p/5430378.html
Copyright © 2011-2022 走看看