ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

DeepSeek LeetCode 3911. 移除子数组元素后第 K 小偶数 JavaScript实现

2026/8/15 10:55:53 拓冰建站 浏览量
DeepSeek    LeetCode 3911. 移除子数组元素后第 K 小偶数 JavaScript实现 根据 LeetCode 3911 题意nums 是严格递增的正整数数组每个查询 [l, r, k] 表示移除子数组 nums[l..r] 后在所有正偶数序列 2,4,6,... 中找出第 k 小的、未被移除的偶数。核心解法二分答案 前缀和· 将答案表示为 2 * t即第 t 个偶数。· 对于给定的 t小于等于 2*t 的偶数总数为 t。· 被移除的子数组中小于等于 2*t 的偶数个数可通过二分查找定位边界再利用偶数前缀和快速计算。· 剩余小于等于 2*t 的偶数个数 t - 被移除个数。若该值 ≥ k则答案 ≤ 2*t否则答案更大。· 对每个查询二分 t得到最小可行 t答案即为 2*t。复杂度· 预处理O(n)· 每个查询O(log(kn) * log n)· 总复杂度O(n q * log(kn) * log n)JavaScript 实现javascriptvar kthRemainingInteger function(nums, queries) {const n nums.length;// 偶数前缀和evenPrefix[i] nums[0..i-1] 中偶数的个数const evenPrefix new Array(n 1).fill(0);for (let i 0; i n; i) {evenPrefix[i 1] evenPrefix[i] (nums[i] % 2 0 ? 1 : 0);}// 二分查找第一个 x 的索引nums 严格递增function upperBound(x) {let lo 0, hi n;while (lo hi) {const mid (lo hi) 1;if (nums[mid] x) lo mid 1;else hi mid;}return lo;}const ans [];for (const [l, r, k] of queries) {// 二分 t第 t 个偶数从 1 开始let lo 1, hi k n 5; // 足够上界while (lo hi) {const mid (lo hi) 1;const x 2 * mid;// 计算子数组 [l, r] 中 ≤ x 的偶数个数const pos upperBound(x);const right Math.min(r, pos - 1);let evenInSub 0;if (right l) {evenInSub evenPrefix[right 1] - evenPrefix[l];}// 剩余 ≤ x 的偶数个数const remaining mid - evenInSub;if (remaining k) {hi mid;} else {lo mid 1;}}ans.push(2 * lo);}return ans;};示例验证javascript// nums [1,2,4,6], queries [[0,2,1]] 移除 [1,2,4] 后第1小偶数应为 6console.log(kthRemainingInteger([1,2,4,6], [[0,2,1]])); // [6]// nums [1,3,5], queries [[0,2,1]] 移除全部后第1小偶数为 2console.log(kthRemainingInteger([1,3,5], [[0,2,1]])); // [2]该实现高效且正确处理所有边界情况可提交至 LeetCode。