給定一個(gè)數(shù)組 nums塞俱,有一個(gè)大小為 k 的滑動(dòng)窗口從數(shù)組的最左側(cè)移動(dòng)到數(shù)組的最右側(cè)姐帚。你只可以看到在滑動(dòng)窗口內(nèi)的 k 個(gè)數(shù)字≌涎模滑動(dòng)窗口每次只向右移動(dòng)一位罐旗。
返回滑動(dòng)窗口中的最大值。
例:輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
輸出: [3,3,5,5,6,7]
思路:每K個(gè)數(shù)據(jù)唯蝶,使用優(yōu)先級(jí)隊(duì)列九秀。數(shù)據(jù)大的優(yōu)先級(jí)高。
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;
}