问题:
解题:
分析:第一个区间要是找到最大值,之后值需要比较新增的值和最大值的比较,但是最大值不再新的区间内就需要重新比较
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if (nums.length == 0) {
return new int[0];
}
int[] res = new int[nums.length - k + 1];
// 计算第一个区间
int maxTemp = nums[0], maxIndex = 0;
for (int i = 1; i < k; i++) {
if (maxTemp < nums[i]) {
maxIndex = i;
maxTemp = nums[i];
}
}
res[0] = maxTemp;
// 计算其他区间
for (int i = 1; i < res.length; i++) {
// 最大值不再区间范围内
if (i > maxIndex) {
maxTemp = nums[i];
maxIndex = i;
for (int j = 1; j < k; j++) {
int index = i + j;
if (maxTemp < nums[index]) {
maxIndex = index;
maxTemp = nums[index];
}
}
} else {
// 最大值在区间范围内,只比较最后一个
int endIndex = i + k - 1;
if (maxTemp < nums[endIndex]) {
maxTemp = nums[endIndex];
maxIndex = endIndex;
}
}
res[i] = maxTemp;
}
return res;
}
}
性能:
减少调用次数,结果还是好的