zoukankan      html  css  js  c++  java
  • 239. Sliding Window Maximum 239.滑动窗口最大值

    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. Return the max sliding window.

    Follow up:
    Could you solve it in linear time?

    Example:

    Input: nums = [1,3,-1,-3,5,3,6,7], and k = 3
    Output: [3,3,5,5,6,7] 
    Explanation: 
    
    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
    

     

    思路:起码两个指针的暴力做法可以想一想。

    public int[] maxSlidingWindow(int[] nums, int k) {
        if(nums == null || k <= 0) return new int [0];
        int [] arr = new int[nums.length - k + 1];
        for(int i = 0; i < nums.length - k + 1; i++){
            int max = Integer.MIN_VALUE;
            for(int j = i; j < i + k; j++)
               max = Math.max(max, nums[j]);
            arr[i] = max;
        }
        return arr;
    }
    View Code

     coinbase oa

    public int minSlidingWindow(List<Integer> nums, int k) {
        if(nums == null || k <= 0) return -1;
        int [] arr = new int[nums.size() - k + 1];
        for(int i = 0; i < nums.size() - k + 1; i++){
            int min = Integer.MAX_VALUE;
            for(int j = i; j < i + k; j++)
               min = Math.min(min, nums.get(j));
            arr[i] = min;
        }
    
        int max = Integer.MIN_VALUE;
        for (int k = 0; k < arr.length; k++) {
            max = Math.max(max, arr[k]);
        }
        return max;
    }
    View Code

     能全过的代码

        public static int segment(int w, List<Integer> in) {
        // Write your code here
        final int[] min_left = new int[in.size()];
    final int[] min_right = new int[in.size()];
    
        min_left[0] = in.get(0);
        min_right[in.size() - 1] = in.get(in.size() - 1);
    
        for (int i = 1; i < in.size(); i++) {
            min_left[i] = (i % w == 0) ? in.get(i) : Math.min(min_left[i - 1], in.get(i));
    
            final int j = in.size() - i - 1;
            min_right[j] = (j % w == 0) ? in.get(j) : Math.min(min_right[j + 1], in.get(j));
        }
    
        final int[] sliding_min = new int[in.size() - w + 1];
        for (int i = 0, j = 0; i + w <= in.size(); i++) {
            sliding_min[j++] = Math.min(min_right[i], min_left[i + w - 1]);
        }
    
        int max = Integer.MIN_VALUE;
        for (int idx = 0; idx < sliding_min.length; idx++) {
            max = Math.max(max, sliding_min[idx]);
        }
        return max;
        }
    
    }
    View Code
  • 相关阅读:
    回调函数
    未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包
    顶帽变化(转载)
    协程 + asyncio
    docker
    vue+uwsgi+nginx部署前后端分离项目
    html
    关于html的基础标签
    关于python中的GIL
    hashlib模块
  • 原文地址:https://www.cnblogs.com/immiao0319/p/13669481.html
Copyright © 2011-2022 走看看