当前位置: 首页 > news >正文

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

以下是 LeetCode 3911 的 Rust 实现,方法名已按要求使用 `kth_remaining_integer`:

```rust
impl Solution {
pub fn kth_remaining_integer(nums: Vec<i32>, queries: Vec<Vec<i32>>) -> Vec<i32> {
// 预处理:提取所有偶数的下标和值(严格递增)
let mut even_idx: Vec<usize> = Vec::new();
let mut even_val: Vec<i32> = Vec::new();

for (i, &x) in nums.iter().enumerate() {
if x % 2 == 0 {
even_idx.push(i);
even_val.push(x);
}
}

let m = even_val.len() as i32;
let mut ans: Vec<i32> = Vec::with_capacity(queries.len());

for q in queries {
let l = q[0] as usize;
let r = q[1] as usize;
let k = q[2];

// 外层二分:第 t 个正偶数(值为 2*t)
let mut lo = k;
let mut hi = k + m + 2;

while lo < hi {
let mid = (lo + hi) / 2;
let target = 2 * mid;

// 内层二分:统计子数组中值 <= 2*t 的偶数个数
let left = even_idx.partition_point(|&v| v < l);
let right = even_idx.partition_point(|&v| v <= r);

let removed = if left >= right {
0
} else {
let slice = &even_val[left..right];
slice.partition_point(|&v| v <= target) as i32
};

// 前 mid 个偶数中,未被移除的个数是否 >= k
if mid - removed >= k {
hi = mid;
} else {
lo = mid + 1;
}
}

ans.push(2 * lo);
}

ans
}
}
```

核心思路(二分套二分)

层次 作用
外层二分 对「第 t 个正偶数」二分,答案值为 2t。验证条件:前 t 个偶数中未被移除的个数 \ge k。
内层二分 `partition_point` 模拟 `bisect`:先锁定子数组区间内的偶数位置,再统计其中值 \le 2t 的个数。
单调性 随着 t 增大,被移除个数只增不减,「剩余个数 = t - \text{removed}」单调递增,保证二分正确。

复杂度

- 时间:O((n + q) \cdot \log m \cdot \log(k+m)),其中 m 为偶数总数。
- 空间:O(n),存储偶数下标和值。

验证结果

输入 输出
`nums=[1,4,7], queries=[[0,2,1],[1,1,2],[0,0,3]]` `[2, 6, 6]`
`nums=[2,5,8], queries=[[0,1,2],[1,2,1],[0,2,4]]` `[6, 2, 12]`
`nums=[3,6], queries=[[0,1,1],[1,1,3]]` `[2, 8]`
`nums=[1,3,5], queries=[[0,2,100]]`(无偶数) `[200]`
`nums=[2,4,6,8], queries=[[0,3,1]]`(全偶数) `[10]`

http://www.jsqmd.com/news/1397663/

相关文章:

  • Nucleus Co-op 本地分屏工具完整指南:3步让PC单机游戏变身多人同屏
  • 知网AIGC检测机制解析与学术写作应对策略
  • TVA-具身智能最新进展(21):打造情感状态与推理引擎
  • ApiFox调用接口前自动设置token
  • 从蓝屏到满血:SMUDebugTool搞定AMD Ryzen调优的6大实战场景
  • 微信聊天记录如何导出备份?WeChatExporter三步轻松完成,珍贵对话永久保存
  • Elden Ring FPS解锁工具完整指南:3分钟突破60帧,畅享144Hz高刷战斗
  • 告别最终版.rar:从Git网盘思维到专业版本控制实战指南
  • 抖音下载工具免费快速上手:批量备份无水印视频与音乐
  • Docker镜像加速器配置指南:解决国内拉取镜像慢的问题
  • 卖金后交易单据留存的意义,哈尔滨贵金属交易维权相关小知识 - 好物循环记
  • 生态农庄的闭环种养与酵素堆肥:原理与一次实地拆解
  • 零基础三步搞定PotPlayer字幕翻译插件:让外语音视频免费出现实时中文字幕
  • 如何利用 Python 创建机器学习模型
  • CTF入门实战:从零搭建环境到解题流程,清华蓝莲花战队思维解析
  • 无需环境配置,OpenClaw 小龙虾 Win10 快速落地教程
  • 装不了微信客户端?wechat-need-web 让微信网页版在浏览器里重新登录
  • 无损视频剪辑终极攻略:免费工具LosslessCut,让几十GB素材也能秒级出片
  • AI 的存在到底是什么,解决客户的痛点
  • SpringBoot+Vue3前后端分离项目实战:从零搭建美食网站
  • US226交换机首台web配置后第二台web无法登录问题解决方法
  • 微信聊天记录导出3步搞定:免费开源工具WeChatExporter备份指南
  • macOS-python项目虚拟环境管理
  • C# WinForm程序退出机制与资源释放全解析
  • 把任务栏变透明,找回桌面氛围感:TranslucentTB 上手指南
  • Sox音频处理工具:从命令行到批量自动化处理实战指南
  • AndroidManifest.xml配置优化全指南
  • 告别 Lenovo Vantage:5 分钟上手 Lenovo Legion Toolkit,我的拯救者性能优化实录
  • Oracle数据库会话强制终止:原理、风险与实战操作指南
  • Qt QSpinBox深度自定义:QSS样式表实战指南与高级技巧