1.easy version
Code:
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
size=len(nums)
if k*size==0:return []
res=[max(nums[i:i+k]) for i in range(size-k+1)]
return res
2.思想巧妙,
执行用时 :3 ms, 在所有 Java 提交中击败了99.35%的用户
内存消耗 :50.8 MB, 在所有 Java 提交中击败了27.98%的用户
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if (nums.length == 0 || k == 0)
return new int[]{};
int max = Integer.MIN_VALUE;
int maxIndex = 0;
int i = 0, j = 0;
int[] result = new int[nums.length - k + 1];
for (; j < k; j++) {
if (nums[j] >= max) {
max = nums[j];
maxIndex = j;
}
}
result[i++] = max;
for (; j < nums.length; j++, i++) {
// 优化1: 这里 >=,找后面的最大值会比较好
if (nums[j] >= max) {
max = nums[j];
maxIndex = j;
result[i] = max;
continue;
}
if (maxIndex >= i) {
result[i] = max;
continue;
}
if (maxIndex < i) {
max = Integer.MIN_VALUE;
// 优化2: 倒序找最大值
for (int l = j; l >= i; l--) {
if (nums[l] > max) {
max = nums[l];
maxIndex = l;
}
}
result[i] = max;
}
}
return result;
}
}