队列--滑动窗口最大值

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
输出: [3,3,5,5,6,7]
思路:每K个数据,使用优先级队列。数据大的优先级高。

 public static int[] maxSlidingWindow(int[] nums, int k) {

        if (nums.length == 0) {
            return new int[k];
        }
        int[] maxNums = new int[nums.length - k + 1];

        int i = 0;
        while (i <= nums.length - k) {
            PriorityQueue<Integer> queue = new PriorityQueue<>(Comparator.reverseOrder());
            int target = i + k - 1;
            int j = i;
            while (j <= target) {
                queue.add(nums[j]);
                j++;
            }
            maxNums[i] = queue.peek();
            i++;
        }

        return maxNums;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容