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

DeepSeek LeetCode 2398. 预算内的最多机器人数目 JavaScript实现

以下是 LeetCode 2398 的 JavaScript 实现,使用滑动窗口 + 单调队列:

```javascript
/**
* @param {number[]} chargeTimes
* @param {number[]} runningCosts
* @param {number} budget
* @return {number}
*/
var maximumRobots = function(chargeTimes, runningCosts, budget) {
const n = chargeTimes.length;
const deque = []; // 单调递减队列,存储索引,队首为当前窗口最大值
let sumRunning = 0;
let left = 0;
let ans = 0;

for (let right = 0; right < n; right++) {
// 1. 维护单调递减队列,保证队首是窗口内 chargeTimes 的最大值
while (deque.length > 0 && chargeTimes[deque[deque.length - 1]] <= chargeTimes[right]) {
deque.pop();
}
deque.push(right);

// 2. 扩大窗口,累加 runningCosts
sumRunning += runningCosts[right];

// 3. 计算当前窗口的总费用并检查是否超预算
const len = right - left + 1;
let maxCharge = chargeTimes[deque[0]];
let cost = maxCharge + len * sumRunning;

// 4. 若费用超出预算,缩小窗口
while (cost > budget && left <= right) {
// 如果左边界恰好是当前最大值,从队列中移除
if (deque[0] === left) {
deque.shift();
}
sumRunning -= runningCosts[left];
left++;

if (left <= right) {
const newLen = right - left + 1;
maxCharge = deque.length > 0 ? chargeTimes[deque[0]] : 0;
cost = maxCharge + newLen * sumRunning;
} else {
cost = 0; // 窗口为空,费用为0
}
}

// 5. 更新最大长度
ans = Math.max(ans, right - left + 1);
}

return ans;
};
```

更简洁的版本

```javascript
var maximumRobots = function(chargeTimes, runningCosts, budget) {
const n = chargeTimes.length;
const deque = [];
let sumRunning = 0;
let left = 0;
let ans = 0;

for (let right = 0; right < n; right++) {
// 维护单调递减队列
while (deque.length && chargeTimes[deque[deque.length - 1]] <= chargeTimes[right]) {
deque.pop();
}
deque.push(right);

sumRunning += runningCosts[right];

// 超预算时收缩窗口
while (deque.length && chargeTimes[deque[0]] + (right - left + 1) * sumRunning > budget) {
if (deque[0] === left) deque.shift();
sumRunning -= runningCosts[left];
left++;
}

ans = Math.max(ans, right - left + 1);
}

return ans;
};
```

算法说明

核心思路:

1. 滑动窗口:维护一个符合条件的连续子数组 [left, right]
2. 单调队列:维护窗口内 chargeTimes 的最大值,队首始终是最大值索引
3. 费用计算:maxCharge + 窗口长度 × 窗口内 runningCosts 和

时间复杂度: O(n)
空间复杂度: O(n)

关键点:

· 使用数组模拟双端队列(push/pop 操作队尾,shift 操作队首)
· 当费用超过 budget 时,右移 left 指针缩小窗口
· 每次移动 left 时,如果它恰好是最大值索引,需要从队列中移除

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

相关文章:

  • Android Recovery 模式工作原理与定制实战
  • 基于LLM的自主智能体框架zorro-agent:从规划到执行的实战指南
  • 终极raylib游戏开发指南:如何在3天内从零到一创建跨平台游戏
  • Windows系统修复工具winfix:命令行自动化修复实战指南
  • 开源项目深度解构指南:从零剖析Apfel项目全流程
  • IntelliJ IDEA 试用过期怎么办?傻瓜式一键重置使用时间(支持2026版)
  • 5大核心功能解析:fre:ac音频转换器如何解决你的音频处理难题
  • Amanmcp:统一云原生与容器化开发运维的CLI工具集实践
  • 掌握6个采购管控节点,企业采购成本可直接降低15%—30%
  • 防抖、节流业务实战:场景落地、兼容方案与取消方法
  • 【TikTok创作者生存警报】:Sora 2已上线API灰度通道,掌握这6类结构化Prompt的人正批量收割流量红利
  • RAGNA框架:专为RAG实验设计的标准化编排器与对比评估平台
  • 你的实验动物在‘跳舞’?可能是DeepLabCut安装没选对版本(Win11实测GPU/CPU性能对比)
  • 想找丙纶生态袋直销厂家?这些不容错过!
  • Saucony索康尼 TRIUMPH 胜利 24 焕新登场 百年跑鞋世家旗舰迭代,再塑精英运动生活新范式
  • Go性能优化实战:使用booster提升高并发服务性能
  • CodeAct:让AI通过代码执行实现自主行动的智能体框架
  • 从零到一:Ubuntu Server上构建生产级Slurm计算集群
  • Streamlit Session State 初始化常见误区与正确使用指南
  • 对话式AI智能中继与编排框架:构建高可用AI应用的核心架构
  • 别再只会用ROUND了!Excel里这8个舍入函数,财务和数据分析师天天在用
  • 人工盘点VS首码U位系统,机房管理效率差10倍?看完秒懂
  • TortoiseGit日志窗口的隐藏玩法:从查看到高效定位代码变更,一篇就够了
  • 百度网盘提取码智能解析工具:开源生态下的资源获取新范式
  • SOME/IP初试
  • 终极指南:如何用Draw.io ECE库轻松绘制专业级电路图
  • 依喜替康:新型喜树碱衍生物的研究进展
  • 港科大DeepTech 28| 用于深度学习加速器设计的电子设计自动化(EDA)
  • VEML6075紫外线传感器:从I2C接口到户外监测的实战指南
  • 被安排做“脏活累活”怎么办?聪明人把它变成了核心竞争力