vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> result;
int n = nums.size();
for (int i = 0; i + k <= n; i++) {
int best = nums[i];
for (int j = i + 1; j < i + k; j++) best = max(best, nums[j]);
result.push_back(best);
}
return result;
}
public int[] maxSlidingWindow(int[] nums, int k) {
int n = nums.length;
int[] result = new int[Math.max(0, n - k + 1)];
for (int i = 0; i + k <= n; i++) {
int best = nums[i];
for (int j = i + 1; j < i + k; j++) best = Math.max(best, nums[j]);
result[i] = best;
}
return result;
}
def max_sliding_window(nums, k):
result = []
n = len(nums)
for i in range(n - k + 1):
best = nums[i]
for j in range(i + 1, i + k): best = max(best, nums[j])
result.append(best)
return result
function maxSlidingWindow(nums: number[], k: number): number[] {
const result: number[] = [];
for (let i = 0; i + k <= nums.length; i++) {
let best = nums[i];
for (let j = i + 1; j < i + k; j++) best = Math.max(best, nums[j]);
result.push(best);
}
return result;
}
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> result;
vector<int> window;
for (int i = 0; i < (int)nums.size(); i++) {
window.insert(lower_bound(window.begin(), window.end(), nums[i]), nums[i]);
if (i >= k) window.erase(lower_bound(window.begin(), window.end(), nums[i - k]));
if (i >= k - 1) result.push_back(window.back());
}
return result;
}
public int[] maxSlidingWindow(int[] nums, int k) {
List<Integer> result = new ArrayList<>();
List<Integer> window = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
window.add(lowerBound(window, nums[i]), nums[i]);
if (i >= k) window.remove(lowerBound(window, nums[i - k]));
if (i >= k - 1) result.add(window.get(window.size() - 1));
}
int[] out = new int[result.size()];
for (int i = 0; i < out.length; i++) out[i] = result.get(i);
return out;
}
private static int lowerBound(List<Integer> window, int target) {
int lo = 0, hi = window.size();
while (lo < hi) {
int mid = (lo + hi) >> 1;
if (window.get(mid) < target) lo = mid + 1;
else hi = mid;
}
return lo;
}
def max_sliding_window(nums, k):
result = []
window = []
for i in range(len(nums)):
bisect.insort_left(window, nums[i])
if i >= k: window.pop(bisect.bisect_left(window, nums[i - k]))
if i >= k - 1: result.append(window[-1])
return result
function maxSlidingWindow(nums: number[], k: number): number[] {
const result: number[] = [];
const window: number[] = [];
const lowerBound = (target: number): number => {
let lo = 0, hi = window.length;
while (lo < hi) {
const mid = (lo + hi) >> 1;
if (window[mid] < target) lo = mid + 1;
else hi = mid;
}
return lo;
};
for (let i = 0; i < nums.length; i++) {
window.splice(lowerBound(nums[i]), 0, nums[i]);
if (i >= k) window.splice(lowerBound(nums[i - k]), 1);
if (i >= k - 1) result.push(window[window.length - 1]);
}
return result;
}
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
vector<int> result;
deque<int> dq;
for (int i = 0; i < (int)nums.size(); i++) {
if (!dq.empty() && dq.front() <= i - k) dq.pop_front();
while (!dq.empty() && nums[dq.back()] < nums[i]) dq.pop_back();
dq.push_back(i);
if (i >= k - 1) result.push_back(nums[dq.front()]);
}
return result;
}
public int[] maxSlidingWindow(int[] nums, int k) {
int[] result = new int[Math.max(0, nums.length - k + 1)];
Deque<Integer> dq = new ArrayDeque<>();
for (int i = 0; i < nums.length; i++) {
if (!dq.isEmpty() && dq.peekFirst() <= i - k) dq.pollFirst();
while (!dq.isEmpty() && nums[dq.peekLast()] < nums[i]) dq.pollLast();
dq.addLast(i);
if (i >= k - 1) result[i - k + 1] = nums[dq.peekFirst()];
}
return result;
}
def max_sliding_window(nums, k):
result = []
dq = collections.deque()
for i in range(len(nums)):
if dq and dq[0] <= i - k: dq.popleft()
while dq and nums[dq[-1]] < nums[i]: dq.pop()
dq.append(i)
if i >= k - 1: result.append(nums[dq[0]])
return result
function maxSlidingWindow(nums: number[], k: number): number[] {
const result: number[] = [];
const deque: number[] = [];
for (let i = 0; i < nums.length; i++) {
if (deque.length > 0 && deque[0] <= i - k) deque.shift();
while (deque.length > 0 && nums[deque[deque.length - 1]] < nums[i]) deque.pop();
deque.push(i);
if (i >= k - 1) result.push(nums[deque[0]]);
}
return result;
}
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
int n = nums.size();
if (n == 0 || k <= 0) return {};
vector<int> left(n), right(n);
for (int i = 0; i < n; i++) {
left[i] = (i % k == 0) ? nums[i] : max(left[i - 1], nums[i]);
}
for (int i = n - 1; i >= 0; i--) {
right[i] = (i == n - 1 || (i + 1) % k == 0) ? nums[i] : max(right[i + 1], nums[i]);
}
vector<int> result;
for (int i = 0; i + k <= n; i++) result.push_back(max(right[i], left[i + k - 1]));
return result;
}
public int[] maxSlidingWindow(int[] nums, int k) {
int n = nums.length;
if (n == 0 || k <= 0) return new int[0];
int[] left = new int[n], right = new int[n];
for (int i = 0; i < n; i++) {
left[i] = (i % k == 0) ? nums[i] : Math.max(left[i - 1], nums[i]);
}
for (int i = n - 1; i >= 0; i--) {
right[i] = (i == n - 1 || (i + 1) % k == 0) ? nums[i] : Math.max(right[i + 1], nums[i]);
}
int[] result = new int[Math.max(0, n - k + 1)];
for (int i = 0; i + k <= n; i++) result[i] = Math.max(right[i], left[i + k - 1]);
return result;
}
def max_sliding_window(nums, k):
n = len(nums)
if n == 0 or k <= 0: return []
left = [0] * n; right = [0] * n
for i in range(n):
left[i] = nums[i] if i % k == 0 else max(left[i - 1], nums[i])
for i in range(n - 1, -1, -1):
right[i] = nums[i] if (i == n - 1 or (i + 1) % k == 0) else max(right[i + 1], nums[i])
result = []
for i in range(n - k + 1): result.append(max(right[i], left[i + k - 1]))
return result
function maxSlidingWindow(nums: number[], k: number): number[] {
const n = nums.length;
if (n === 0 || k <= 0) return [];
const left = new Array<number>(n), right = new Array<number>(n);
for (let i = 0; i < n; i++) {
left[i] = i % k === 0 ? nums[i] : Math.max(left[i - 1], nums[i]);
}
for (let i = n - 1; i >= 0; i--) {
right[i] = i === n - 1 || (i + 1) % k === 0 ? nums[i] : Math.max(right[i + 1], nums[i]);
}
const result: number[] = [];
for (let i = 0; i + k <= n; i++) result.push(Math.max(right[i], left[i + k - 1]));
return result;
}