LeetCode 每日一题笔记 日期:2026.05.12 题目:1665. 完成所有任务的最少初始能量

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.05.12
  • 题目:1665. 完成所有任务的最少初始能量
  • 难度:中等
  • 标签:数组、贪心、排序

1. 题目理解

问题描述

给定二维数组 tasks,其中 tasks[i] = [实际消耗, 最低要求]

执行第 i 个任务必须满足:当前能量 ≥ 最低要求

执行后能量会 减去实际消耗

求完成所有任务需要的 最小初始能量

示例

输入:tasks = \[1,2,2,4,3,6,4,8]

输出:8

2. 解题思路

核心观察

  • 贪心策略:按(最低要求 - 实际消耗)降序排序
  • 先做"差值大"的任务,最后做"差值小"的任务,能让初始能量最小

算法步骤

  1. 排序:按 (b - a) 从大到小排序任务
  2. 先计算所有任务的总实际消耗(理论最低下限)
  3. 模拟执行任务,若当前能量不够最低要求,补充差值
  4. 最终得到最小初始能量

3. 代码实现

java 复制代码
package lc1665;

import java.util.Arrays;

class Solution {
    public int minimumEffort(int[][] tasks) {
        Arrays.sort(tasks, (row1, row2) -> {
            return (row2[1] - row2[0]) - (row1[1] - row1[0]);
        });
        int res = 0;
        for (int i = 0; i < tasks.length; i++) {
            res += tasks[i][0];
        }
        int temp = res;
        for (int i = 0; i < tasks.length; i++) {
            if (temp >= tasks[i][1]) {
                temp -= tasks[i][0];
            } else {
                res += tasks[i][1] - temp;
                temp = tasks[i][1] - tasks[i][0];
            }
        }
        return res;
    }
}

4. 代码优化说明

  • 贪心排序一次完成,无额外数据结构
  • 仅两次遍历,无嵌套循环
  • 空间 O(1) 额外空间,时间最优

5. 复杂度分析

  • 时间复杂度 :O(n log n)
    排序主导复杂度
  • 空间复杂度 :O(1)
    仅使用常数变量

6. 总结

  • 贪心核心:按 (b - a) 降序排列
  • 先算总消耗,再模拟补足不足
  • 是任务门槛类贪心的经典模板题
相关推荐
wabs6663 小时前
关于图论【卡码网117.软件构建的思考】
数据结构·算法·软件构建·图论·卡码网
mifengxing4 小时前
LeetCode 41.缺失的第一个正数|Hard题O(n)+O(1)最优解法深度解析
java·算法·leetcode·排序算法
一米阳光86614 小时前
软考(中级)软件设计师核心笔记(6)系统开发基础——需求分析、系统设计
笔记·职场发展·需求分析·软考·软件设计师·中级职称
Tongzhi20264 小时前
从部署到运维:通芝科技无感考勤一体机的全流程效率解析
运维·数据结构·科技·算法·贪心算法
Wang's Blog5 小时前
AI Agent白手起家30: 动态示例选择器之根据长度选择 Few Shot 示例
算法
oyguyteggytrrwwwrt6 小时前
自制交叉线路识别算法
算法
手写码匠6 小时前
华为云Flexus+DeepSeek征文|Dify 多智能体协同编排实战:R1 规划 + V3 执行,构建企业 Agent 团队
人工智能·深度学习·算法·aigc
晓天衡宇•评测社区7 小时前
FSR-Bench 前沿科学推理榜单发布:GPT-5.5 居首,“会推理”未必“能答对”
算法
雨田言炎8 小时前
四、关于Qt项目需要知道的
开发语言·笔记·qt
程序喵大人9 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法