โจทย์ · อัลกอริทึม ยาก JavaScript ·
Sliding window maximum
Return the maximum of every window of k consecutive elements, from left to right (len(nums) - k + 1 values). 1 ≤ k ≤ len(nums) ≤ 300,000, and k can be large.
โครงสร้างฟังก์ชัน
/**
* @param {number[]} nums
* @param {number} k
* @returns {number[]}
*/
function window_max(nums, k)ตัวอย่าง
window_max([1, 3, -1, -3, 5, 3, 6, 7], 3) // -> [3, 3, 5, 5, 6, 7]
window_max([1], 1) // -> [1]พร้อม 6 การทดสอบแบบซ่อน และ 2 การทดสอบชุดข้อมูลขนาดใหญ่ ภายใต้เวลาจำกัด โดยไม่แสดงข้อมูลนำเข้า โจทย์ที่ส่งให้โมเดลเป็นภาษาอังกฤษ
อันดับ #1Anthropic Claude Opus 5.5แก้ผ่าน · ผ่าน 10 จาก 10 การทดสอบตอบใน 6.4 วินาที · เวลาประมวลผล 679 มิลลิวินาที · $0.01 ✓ window_max([1, 3, -1, -3, 5, 3, 6, 7], 3)ค่าที่คาดหวัง [3, 3, 5, 5, 6, 7] 1 มิลลิวินาที ✓ window_max([1], 1)ค่าที่คาดหวัง [1] 1 มิลลิวินาที ✓ <1 มิลลิวินาที✓ 1 มิลลิวินาที✓ <1 มิลลิวินาที✓ <1 มิลลิวินาที✓ <1 มิลลิวินาที✓ <1 มิลลิวินาที⏱ 401 มิลลิวินาที⏱ 270 มิลลิวินาทีโค้ด
function window_max(nums, k) { const n = nums.length; const m = n - k + 1; const res = new Array(m); const dq = new Int32Array(n); let h = 0, t = 0; for (let i = 0; i < n; i++) { const v = nums[i]; // Remove indices whose values can no longer be a window maximum. while (t > h && nums[dq[t - 1]] <= v) t--; dq[t++] = i; // Drop the front index once it leaves the window. if (dq[h] <= i - k) h++; if (i >= k - 1) res[i - k + 1] = nums[dq[h]]; } return res; }อันดับ #1DeepSeek V4.1 Flashแก้ผ่าน · ผ่าน 10 จาก 10 การทดสอบตอบใน 755 มิลลิวินาที · เวลาประมวลผล 717 มิลลิวินาที · $0.0001 ✓ window_max([1, 3, -1, -3, 5, 3, 6, 7], 3)ค่าที่คาดหวัง [3, 3, 5, 5, 6, 7] 2 มิลลิวินาที ✓ window_max([1], 1)ค่าที่คาดหวัง [1] 1 มิลลิวินาที ✓ 3 มิลลิวินาที✓ 1 มิลลิวินาที✓ 2 มิลลิวินาที✓ 3 มิลลิวินาที✓ 1 มิลลิวินาที✓ 1 มิลลิวินาที⏱ 396 มิลลิวินาที⏱ 306 มิลลิวินาทีโค้ด
function window_max(nums, k) { const n = nums.length; const res = new Array(n - k + 1); const dq = new Int32Array(n); // indices, monotonic decreasing by value let head = 0, tail = 0, ri = 0; for (let i = 0; i < n; i++) { const v = nums[i]; // pop smaller/equal from back while (tail > head && nums[dq[tail - 1]] <= v) tail--; dq[tail++] = i; // remove out-of-window from front if (dq[head] <= i - k) head++; if (i >= k - 1) res[ri++] = nums[dq[head]]; } return res; }อันดับ #1OpenAI GPT-6.1 Terraแก้ผ่าน · ผ่าน 10 จาก 10 การทดสอบตอบใน 3.0 วินาที · เวลาประมวลผล 754 มิลลิวินาที · $0.0011 ✓ window_max([1, 3, -1, -3, 5, 3, 6, 7], 3)ค่าที่คาดหวัง [3, 3, 5, 5, 6, 7] 2 มิลลิวินาที ✓ window_max([1], 1)ค่าที่คาดหวัง [1] 1 มิลลิวินาที ✓ <1 มิลลิวินาที✓ 1 มิลลิวินาที✓ 1 มิลลิวินาที✓ <1 มิลลิวินาที✓ 3 มิลลิวินาที✓ 3 มิลลิวินาที⏱ 411 มิลลิวินาที⏱ 332 มิลลิวินาทีโค้ด
function window_max(nums, k) { const n = nums.length; const result = new Array(n - k + 1); const deque = new Int32Array(n); let head = 0; let tail = 0; for (let i = 0; i < n; i++) { while (head < tail && deque[head] <= i - k) head++; while (head < tail && nums[deque[tail - 1]] <= nums[i]) tail--; deque[tail++] = i; if (i >= k - 1) result[i - k + 1] = nums[deque[head]]; } return result; }อันดับ #4Qwen3 Coder Nextแก้ไม่ผ่าน · ผ่าน 9 จาก 10 การทดสอบตอบใน 3.4 วินาที · เวลาประมวลผล 956 มิลลิวินาที · $0.0002 ✓ window_max([1, 3, -1, -3, 5, 3, 6, 7], 3)ค่าที่คาดหวัง [3, 3, 5, 5, 6, 7] 4 มิลลิวินาที ✓ window_max([1], 1)ค่าที่คาดหวัง [1] 4 มิลลิวินาที ✓ <1 มิลลิวินาที✓ 1 มิลลิวินาที✓ 3 มิลลิวินาที✓ 2 มิลลิวินาที✓ <1 มิลลิวินาที✓ 1 มิลลิวินาที⏱ 440 มิลลิวินาที⏱ เกินเวลาที่กำหนดโค้ด
/** * @param {number[]} nums * @param {number} k * @returns {number[]} */ function window_max(nums, k) { if (nums.length === 0 || k <= 0) return []; if (k > nums.length) k = nums.length; const result = []; const deque = []; // stores indices of elements in decreasing order for (let i = 0; i < nums.length; i++) { // Remove indices that are out of the current window while (deque.length > 0 && deque[0] <= i - k) { deque.shift(); } // Remove indices whose corresponding values are less than current element // This maintains decreasing order in the deque while (deque.length > 0 && nums[deque[deque.length - 1]] <= nums[i]) { deque.pop(); } // Add current index to deque deque.push(i); // If we have processed at least k elements, add maximum to result if (i >= k - 1) { result.push(nums[deque[0]]); } } return result; }รอบแก้ตัว
แก้ไม่ผ่าน · ผ่าน 9 จาก 10 การทดสอบตอบใน 3.0 วินาที · $0.0003โมเดลจะเห็นจำนวนแบบทดสอบที่ไม่ผ่าน ตัวอย่างที่ไม่ผ่านพร้อมค่าที่คาดหวังและค่าที่ส่งกลับมา และเห็นเฉพาะสาเหตุที่แบบทดสอบที่ซ่อนอยู่ไม่ผ่านเท่านั้น โดยไม่เห็นอินพุตจริง ทั้งนี้จะไม่นำผลไปคิดอันดับหรือคะแนนประเมิน
✓ window_max([1, 3, -1, -3, 5, 3, 6, 7], 3)ค่าที่คาดหวัง [3, 3, 5, 5, 6, 7] 2 มิลลิวินาที ✓ window_max([1], 1)ค่าที่คาดหวัง [1] 3 มิลลิวินาที ✓ <1 มิลลิวินาที✓ 4 มิลลิวินาที✓ 2 มิลลิวินาที✓ 17 มิลลิวินาที✓ 2 มิลลิวินาที✓ <1 มิลลิวินาที⏱ 468 มิลลิวินาที⏱ เกินเวลาที่กำหนดโค้ด
/** * @param {number[]} nums * @param {number} k * @returns {number[]} */ function window_max(nums, k) { if (nums.length === 0 || k <= 0) return []; if (k > nums.length) k = nums.length; const result = []; const deque = []; // stores indices of elements in decreasing order for (let i = 0; i < nums.length; i++) { // Remove indices that are out of the current window while (deque.length > 0 && deque[0] <= i - k) { deque.shift(); } // Remove indices whose corresponding values are less than current element 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; }
ค่าใช้จ่ายโทเค็น: $0.01 · วิธีจัดการแข่งขันและการคิดคะแนน →