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

DeepSeek LeetCode 2612. 最少翻转操作数 JavaScript实现

以下是 LeetCode 2612「最少翻转操作数」的 JavaScript 实现,采用 BFS + 并查集(路径压缩) 优化,时间复杂度 O(n·α(n)),可处理 n ≤ 10⁵ 的数据规模。

```javascript
/**
* @param {number} n
* @param {number} p
* @param {number[]} banned
* @param {number} k
* @return {number[]}
*/
var minReverseOperations = function(n, p, banned, k) {
const ans = new Array(n).fill(-1);
ans[p] = 0; // 起点翻转次数为 0

const banSet = new Set(banned); // 禁止位置集合

// 并查集:parent[parity][i] 表示奇偶性为 parity 的位置 i 的下一个可用位置
const parent = [new Array(n + 2), new Array(n + 2)];
for (let parity = 0; parity < 2; parity++) {
for (let i = 0; i <= n + 1; i++) {
parent[parity][i] = i; // 初始指向自身
}
}

// 查找根(路径压缩)
const find = (parity, x) => {
if (parent[parity][x] !== x) {
parent[parity][x] = find(parity, parent[parity][x]);
}
return parent[parity][x];
};

// 标记不可用的位置(被禁止或起点)
for (let i = 0; i < n; i++) {
if (i === p || banSet.has(i)) {
parent[i % 2][i] = i + 2; // 指向下一个同奇偶的位置
}
}

const queue = [p];
let head = 0;

while (head < queue.length) {
const cur = queue[head++];

// 计算可达区间 [mn, mx]
let mn = Math.max(k - 1 - cur, cur - k + 1);
let mx = Math.min(cur + k - 1, 2 * n - k - cur - 1);
if (mn > mx) continue;

const parity = mn % 2; // 区间内所有位置奇偶性相同
let pos = find(parity, mn); // 区间内第一个可用位置

while (pos <= mx && pos < n) {
ans[pos] = ans[cur] + 1; // 更新步数
queue.push(pos); // 入队继续 BFS
// 将当前 pos 标记为已使用,指向下一个可用位置
parent[parity][pos] = find(parity, pos + 2);
pos = find(parity, pos); // 继续寻找下一个可用位置
}
}

return ans;
};
```

核心要点

1. BFS 层次遍历
从起点 p 出发,每次翻转操作相当于一步移动,BFS 保证首次到达某位置时步数最小。
2. 可达区间公式
当前 1 在位置 i,翻转长度为 k 的子数组后,新位置 j 满足:
mn = max(k-1-i, i-k+1),mx = min(i+k-1, 2n-k-i-1)
且 j 与 i 的奇偶性相同(因为 L+R 为定值)。
因此可达位置是 [mn, mx] 内所有与 i 同奇偶的位置。
3. 并查集优化
· 用 parent[0] 维护偶数下标中下一个未访问的位置,parent[1] 维护奇数下标。
· find 函数支持路径压缩,快速跳过已访问的位置。
· 每个位置只会被处理一次,总操作次数 ≈ O(n·α(n))。

复杂度分析

· 时间复杂度:O(n·α(n)),其中 α 为阿克曼函数反函数,近似常数。每个位置最多被查询和删除一次。
· 空间复杂度:O(n),用于答案数组、并查集、队列和禁止集合。

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

相关文章:

  • 加密流量分析:从TLS握手明文到行为建模的实战指南
  • 空基视觉无感定位组网 适配矿井无信号区域人员管控
  • Veo视频生成引擎深度集成方案(官方未公开的Webhook级联协议与跨平台帧同步技术首次披露)
  • 评测全网10款主流降AI率工具:帮你锁定真正好用靠谱的一款
  • 全域视频跨镜智能追踪 煤矿作业人员全程轨迹溯源
  • 揭秘顶级AI画师不愿透露的ChatGPT绘画提示词生成底层逻辑:基于LLM注意力机制的Prompt语法树建模
  • 安卓13真机+VMOSPro双环境HttpCanary抓包实战指南
  • DeepSeek LeetCode 2617. 网格图中最少访问的格子数 Java实现
  • ChatGPT+B站策划=降维打击?不,92%创作者正在错误使用——来自217个失败案例的反模式图谱(含3个致命Prompt陷阱)
  • 上位机知识篇---部署过程小知识点(1)
  • LangGraph 状态存储优化:处理大规模多智能体数据的高效方案
  • Python基础篇:闭包、装饰器wrapper
  • DeepSeek LeetCode 2617. 网格图中最少访问的格子数 TypeScript实现
  • 上位机使用篇---Jetson的烧写和备份
  • java类继承理解
  • 全球首份Gemini代码生成「生产就绪度」白皮书(含27项SRE级验收标准+自动化检测脚本开源)
  • 黑白电视的“单眼魔法“:揭秘那个只用亮度讲故事的奇妙世界
  • 贝叶斯网络基本概念 CS188 Note12 学习笔记
  • 矩阵补全因果推断:破解贸易政策评估中的内生性与异质性难题
  • 亮度与色度:揭秘视觉世界的“双重密码“
  • DeepSeek-R1在火山引擎部署的7大避坑指南:从环境配置到GPU显存优化,一线工程师亲授
  • 2025-2026年国内人力资源外包公司推荐:TOP5评测价格注意事项适用场景案例 - 品牌推荐
  • 深度学习篇---张量
  • 贝叶斯网络中条件独立性的判断 CS188 Note13 学习笔记
  • 哪家工程信息平台专业?2026年5月推荐TOP5评测数据覆盖广防漏单特点选择指南 - 品牌推荐
  • 2026年5月郑州轴承专业服务商盘点:河南瓦房店轴承销售有限公司实力解析 - 2026年企业推荐榜
  • 2026果蔬加工去皮设备推荐榜:智能净菜加工设备/智能去皮机/果蔬切片机/果蔬削皮机/果蔬加工生产线/果蔬去皮机/选择指南 - 优质品牌商家
  • 深度学习篇---NVIDIA TensorRT
  • 国防军工涉密网络全光网设备定制化推荐:电话光端机/管理型光纤收发器/综合多业务光端机/视频光端机/视频综合业务光端机/选择指南 - 优质品牌商家
  • 如何在3分钟内精准定位Windows热键冲突:Hotkey Detective终极指南