算法练习题24——leetcode3296移山所需的最小秒数(二分模拟)

news2024/9/23 12:37:27

【题目描述】

 

【代码示例(java)】

class Solution {
    
    // 计算让工人们将山的高度降到0所需的最少时间
    public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) {
        long left = 0; // 最少时间初始为0
        long right = 0; // 最大时间初始化为0
        
        // 计算每个工人在最坏情况下,单独完成整个山的工作所需的最大时间
        for (int workTime : workerTimes) {
            // workTime 是工人降低1个单位高度所需的时间
            // 公式计算从1降低到mountainHeight所需的总时间
            // 总工作量:1 + 2 + ... + mountainHeight = (mountainHeight * (mountainHeight + 1)) / 2
            // 总时间就是工人工作时间乘以这个总工作量
            right = Math.max(right, (long) workTime * (mountainHeight * (mountainHeight + 1L)) / 2L);
        }

        // 使用二分查找来寻找完成任务的最少时间
        // 这里的范围是 [left, right]
        while (left < right) {
            long mid = left + (right - left) / 2; // 计算中间时间,防止溢出
            // 检查在mid秒内是否可以完成任务
            if (can(mountainHeight, workerTimes, mid)) {
                right = mid; // 如果可以完成任务,缩小右边界
            } else {
                left = mid + 1; // 如果不能完成任务,增加左边界
            }
        }
        return left; // left即为最小的可以完成任务的时间
    }

    // 检查工人们能否在给定的time秒内将山的高度降到0
    private boolean can(int mountainHeight, int[] workerTimes, long time) {
        long totalReduceHeight = 0; // 总共降低的高度初始化为0

        // 遍历每个工人,计算他们在time秒内可以降低的最大高度
        for (int workTime : workerTimes) {
            long left = 0; // 当前工人能降低的最小高度初始化为0
            long right = mountainHeight; // 当前工人能降低的最大高度不会超过mountainHeight

            // 使用二分查找计算该工人在给定time秒内可以降低的最大高度
            while (left < right) {
                // 计算mid,这个mid是该工人可能降低的单位高度
                long mid = left + (right - left + 1) / 2; // 这里加1是为了偏向右边,避免死循环
                // 计算该工人降低mid个单位高度所需的时间:工作时间 * (1 + 2 + ... + mid)
                long requiredTime = workTime * mid * (mid + 1) / 2;
                
                // 如果当前时间够用,说明可以降低mid个单位高度
                if (requiredTime <= time) {
                    left = mid; // 时间足够,增加高度
                } else {
                    right = mid - 1; // 时间不足,降低高度
                }
            }

            // 当前工人能降低的最大高度是left
            totalReduceHeight += left; // 将该工人降低的高度累计到总高度上

            // 如果总的降低高度已经达到或超过山的高度,则任务可以完成,提前返回true
            if (totalReduceHeight >= mountainHeight) {
                return true;
            }
        }

        // 如果所有工人合计降低的高度不足以将山的高度降为0,返回false
        return totalReduceHeight >= mountainHeight;
    }
}

【最大值公式】

就是一个等差数列求和,加 L 是为了确保该数字被视为 long 类型,这样可以避免在大数计算时溢出的问题。在这道题的情况下,mountainHeight 可能会很大,因此在某些运算中需要将其转换为 long 类型来确保计算的正确性。 

好难 我要缺氧了谁来救我 谁 来 救救 本 小 主 哭.....

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux,uboot,kernel启动流程,S5PV210芯片的启动流程,DRAM控制器初始化流程

一、S5PV210芯片的DRAM控制器介绍、初始化DDR的流程分析 1、DRAM的地址空间 1)从地址映射图可以知道&#xff0c;S5PV210有两个DRAM端口。 DRAM0的内存地址范围&#xff1a;0x20000000&#xff5e;0x3FFFFFFF&#xff08;512MB&#xff09;&#xff1b;DRAM1:的内存地址范围…

AI大模型教程 Prompt提示词工程 AI原生应用开发零基础入门到实战【2024超细超全,建议收藏】

在AGI&#xff08;通用人工智能&#xff09;时代&#xff0c;那些既精通AI技术、又具备编程能力和业务洞察力的复合型人才将成为最宝贵的资源。为此&#xff0c;我们提出了‘AI全栈工程师’这一概念&#xff0c;旨在更精准地描述这一复合型人才群体&#xff0c;而非过分夸大其词…

全栈项目小组【算法赛】题目及解题

题目&#xff1a;全栈项目小组【算法赛】 题目&#xff1a; 解题思路 1.遍历简历信息&#xff1a;我们需要读取所有简历&#xff0c;根据期望薪资和岗位类型进行分类和统计。 2.分类统计&#xff1a;使用哈希表来存储每个薪资下的前端&#xff08;F&#xff09;和后端&#…

传统产品经理如何快速转行成为顶尖的AI产品经理?

前言 产品经理本身便是一个需要不断学习、不断实践的岗位&#xff0c;即使是AI产品经理&#xff0c;也不能脱离产品经理岗位的本质。 另外&#xff0c;要想知道具体如何转行成为顶尖的AI产品经理&#xff0c;我们首先要明确两个问题&#xff0c;即&#xff1a; 什么是AI产品…

HTML5简介的水果蔬菜在线商城网站源码系列模板3

文章目录 1.设计来源1.1 主界面1.2 商品列表1.3 商品信息1.4 购物车1.5 其他页面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.ne…

AI Native平台,跨越AI应用从创新到生产的鸿沟

2024年是AI应用的元年&#xff0c;以大模型为中心的 AI Native 应用大爆发正在从理想变成现实。云计算带来的应用创新潮&#xff0c;经历了虚拟机时代和云原生时代&#xff0c;正在全面拥抱以大模型为核心的 AI Native 阶段&#xff0c;推动大数据与AI的工作流前所未有地紧密结…

【C语言进阶】第四节:自定义类型详解

1、结构体 1.1 结构体变量的定义和初始化 struct Point//类型声明 {int x;int y; }p1;//声明类型的同时定义变量p1struct Point p2;//定义结构体变量p2//初始化&#xff1a;定义变量的同时赋初值。 struct Point p3 { x, y };struct Node {int data;struct Point p;struct N…

智谱清影的魅力:使用CogVideoX-2b生成6秒视频的真实体验!

文章目录 1 3D变分自编码器与3D RoPE2 精确描述与多样化输入3 社区的力量与未来展望 在8月6日&#xff0c;智谱 AI 发布了一则令人振奋的消息&#xff1a;他们决定开源其视频生成模型CogVideoX。 1 3D变分自编码器与3D RoPE 作为一名开发者&#xff0c;我近期才来体验这个新工…

只需5分钟!掌握学术写作的核心逻辑!

人工智能的广泛应用中&#xff0c;ChatGPT 已被证明是一种极具潜力的语言模型&#xff0c;其功能涵盖多个领域&#xff0c;显示出强大的适应性。在 GPT-4 架构的推动下&#xff0c;ChatGPT 正在彻底改变我们与文本驱动的人工智能的交互模式。 在学术界&#xff0c;学术写作至关…

【AIGC】ChatGPT提示词助力高效文献处理、公文撰写、会议纪要与视频总结

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;高效英文文献阅读提示词使用方法 &#x1f4af;高效公文写作提示词使用方法 &#x1f4af;高效会议纪要提示词使用方法 &#x1f4af;高效视频内容分析提示词使用方法 &a…

Unity3D 小案例 像素贪吃蛇 03 蛇的碰撞

Unity3D 小案例 像素贪吃蛇 第三期 蛇的碰撞&#xff08;完结&#xff09; 像素贪吃蛇 碰撞蛇身 当蛇头碰撞到蛇身时&#xff0c;游戏应该判定为失败。 找到蛇身预制体&#xff0c;添加 Body 标签和碰撞体&#xff0c;碰撞体的大小为 0.5&#xff0c;跟蛇头和蛇身的碰撞体范…

两台虚拟机之分布式部署

Apache2 和 PHP 安装 在虚拟机1上执行以下步骤: 更新系统包列表: sudo apt update安装 Apache2: sudo apt install apache2 -y安装 PHP 及其扩展: sudo apt install php libapache2-mod-php php-mysql配置Apache和PHP sudo nano /etc/apache2/mods-enabled/dir.conf#…

【BEV 视图变换】Ray-based(2): 代码复现+画图解释 基于深度估计、bev_pool(代码一键运行)

paper&#xff1a;Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D code&#xff1a;https://github.com/nv-tlabs/lift-splat-shoot 一、完整复现代码(可一键运行)和效果图 import torch import torch.nn as nn import mat…

【Go】Go语言切片(Slice)深度剖析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

知乎:从零开始做自动驾驶定位; 注释详解(二)

这个个系统整体分为: 数据预处理 前端里程计 后端优化 回环检测 显示模块。首先来看一下数据预处理节点做的所有事情&#xff1a; 数据预处理节点 根据知乎文章以及代码我们知道: 节点功能输入输出数据预处理1.接收各传感器信息2.传感器数据时间同步 3.点云运动畸变补偿 4.传…

免杀对抗—python混淆算法反序列化shellcode

一、前言 内网已经学的七七八八了(主要是实验环境太麻烦了&#xff0c;累了)&#xff0c;今天就开启新的篇章——免杀。免杀我们主要是对生成的shellcode做免杀&#xff0c;而不是对生成的exe做免杀。为啥呢&#xff0c;你可以这样理解&#xff0c;exe已经是成品了&#xff0c…

Vue 内存泄漏分析:如何避免开发过程中导致的内存泄漏问题

一. 引言 Vue 作为一款流行的前端框架&#xff0c;已经在许多项目中得到广泛应用。然而&#xff0c;随着我们在 Vue 中构建更大规模的应用程序&#xff0c;我们可能会遇到一个严重的问题&#xff0c;那就是内存泄漏。内存泄漏是指应用程序在使用内存资源时未正确释放&#xff…

昇思MindSpore进阶教程-模型模块自定义

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 基础用法示例 神经网络模型由各种层(Lay…

【AI实战攻略】保姆级教程:用AI打造治愈动画vlog,轻松打造爆款,快速涨粉!

在当今这个快节奏的社会中&#xff0c;你是否也曾在某个雨夜&#xff0c;沉浸于那些温馨而治愈的动画短视频中&#xff0c;找到片刻的宁静与放松&#xff1f; 窗外大雨滂沱&#xff0c;而你&#xff0c;刚结束一天的忙碌&#xff0c;沐浴在温暖的热水中&#xff0c;随后裹上柔…

Integer 源码记录

Integer 公共方法结构 注意&#xff1a; 通过构造函数创建一个Integer对象&#xff0c;每次都会返回一个新的对象&#xff0c;如果使用 进行对象的比较&#xff0c;那么结果是false。 public Integer(int value) {this.value value;}与之对应的是&#xff0c;valueOf 方法…