LeetCode 1199. 建造街区的最短时间(优先队列贪心)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

你是个城市规划工作者,手里负责管辖一系列的街区。在这个街区列表中 blocks[i] = t 意味着第 i 个街区需要 t 个单位的时间来建造。

由于一个街区只能由一个工人来完成建造。

所以,一个工人要么需要再召唤一个工人(工人数增加 1);要么建造完一个街区后回家。这两个决定都需要花费一定的时间。

一个工人再召唤一个工人所花费的时间由整数 split 给出。

注意:如果两个工人同时召唤别的工人,那么他们的行为是并行的,所以时间花费仍然是 split。

最开始的时候只有 一个 工人,请你最后输出建造完所有街区所需要的最少时间

示例 1:
输入:blocks = [1], split = 1
输出:1
解释:我们使用 1 个工人在 1 个时间单位内来建完 1 个街区。示例 2:
输入:blocks = [1,2], split = 5
输出:7
解释:我们用 5 个时间单位将这个工人分裂为 2 个工人,
然后指派每个工人分别去建造街区,从而时间花费为 5 + max(1, 2) = 7示例 3:
输入:blocks = [1,2,3], split = 1
输出:4
解释:
将 1 个工人分裂为 2 个工人,然后指派第一个工人去建造最后一个街区,
并将第二个工人分裂为 2 个工人。
然后,用这两个未分派的工人分别去建造前两个街区。
时间花费为 1 + max(3, 1 + max(1, 2)) = 4提示:
1 <= blocks.length <= 1000
1 <= blocks[i] <= 10^5
1 <= split <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-time-to-build-blocks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

贪心算法(Greedy Algorithm)之霍夫曼编码

  • 类似霍夫曼树,将最小的两个合并,再放回优先队列,使得数量大的被加的次数少
class Solution {
public:int minBuildTime(vector<int>& blocks, int split) {priority_queue<int, vector<int>, greater<int>> q;//小顶堆for(int b : blocks) q.push(b);while(q.size() > 1){int a = q.top();q.pop();int b = q.top();q.pop();q.push(max(a,b)+split);}return q.top();}
};

68 ms 9.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

用Android-X86和VirtualBox打造高性能Android开发环境

现在已经采用genymotion替换下面的方法 https://www.genymotion.com转载于:https://www.cnblogs.com/sunzhuo1228/archive/2013/05/30/3109445.html

LeetCode 1088. 易混淆数 II(回溯/BFS)

文章目录1. 题目2. 解题2.1 回溯2.2 BFS1. 题目 本题我们会将数字旋转 180 来生成一个新的数字。 比如 0、1、6、8、9 旋转 180 以后&#xff0c;我们得到的新数字分别为 0、1、9、8、6。 2、3、4、5、7 旋转 180 后&#xff0c;是 无法 得到任何数字的。 易混淆数&#xf…

python——import导入模

1.import 搜索路径 import sys sys.path 路径搜索 从上⾯列出的⽬录⾥依次查找要导⼊的模块⽂件 表示当前路径 程序执⾏时导⼊模块路径 sys.path.append(/home/itcast/xxx) sys.path.insert(0, /home/itcast/xxx) #可以确保先搜索这个路径 I…

timer.schedule定时器用法

Timer是一种定时器工具&#xff0c;用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。 TimerTask一个抽象类&#xff0c;它的子类代表一个可以被Timer计划的任务。 schedule的意思&#xff08;时间表、进度表&#xff09; timer.schedule(new MyTas…

LeetCode 759. 员工空闲时间(排序)

文章目录1. 题目2. 解题1. 题目 给定员工的 schedule 列表&#xff0c;表示每个员工的工作时间。 每个员工都有一个非重叠的时间段 Intervals 列表&#xff0c;这些时间段已经排好序。 返回表示 所有 员工的 共同&#xff0c;正数长度的空闲时间 的有限时间段的列表&#xf…

python——作用域 == is

作⽤域 test.py num 200 def print_num(): print("----print_num func, num%d----"%num) main.py from test import * num 100 def print_num2(): print("----print_num2 func, num%d----…

U-Boot-2009-03移植笔记(移植准备)

因为工作需要&#xff0c;需要在S3C2440板子上移植U-boot和Linux&#xff0c;虽然关于S3c2440移植的文章比较多&#xff0c;但是毕竟全面的不多&#xff0c;而且都是别人的&#xff0c;这次自己动手&#xff0c;以此系列记录全过程。 U-boot1.1.6中有支持smdk2410的代码&#x…

LeetCode 656. 金币路径(DP)

文章目录1. 题目2. 解题1. 题目 给定一个数组 A&#xff08;下标从 1 开始&#xff09;包含 N 个整数&#xff1a;A1&#xff0c;A2&#xff0c;……&#xff0c;AN 和一个整数 B。 你可以从数组 A 中的任何一个位置&#xff08;下标为 i&#xff09;跳到下标 i1&#xff0c;i…

python中的深浅拷贝

1. 浅拷贝 copy.copy 浅拷贝是对于⼀个对象的顶层拷贝 通俗的理解是&#xff1a;拷贝了引⽤&#xff0c;并没有拷贝内容 浅拷贝只复制第一层数据&#xff0c;更深层的引用不管。 2. 深拷贝 copy.deepcopy 深拷贝是对于⼀个对象所有层次的拷贝(递归) 、 3. 注意点浅…

邻接矩阵的深度优先遍历

废话不多说&#xff0c;直接看代码 t#include<stdio.h> #include<stdlib.h> #include<string.h> #define INFINITY INT_MAX #define MAX_VERTEX_NUM 20 bool visted[MAX_VERTEX_NUM]; typedef char VertexType; typedef int VRType; typedef int QElemT…

Linux中使用GDB调试NS2

在使用ns2过程中&#xff0c;避免不了要修改或者添加一些模块&#xff0c;对C代码进行改动。编写好自己的功能模块以后&#xff0c;进行编译执行。但通常不会这么容易通过&#xff0c;经常会出现编译可以通过&#xff0c;但执行是会出错。比较常见的是“段错误”&#xff0c;因…

LeetCode 291. 单词规律 II(回溯)

文章目录1. 题目2. 解题1. 题目 给你一种规律 pattern 和一个字符串 str&#xff0c;请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循&#xff0c;例如 pattern 里的每个字母和字符串 str 中每个 非空 单词之间&#xff0c;存在着双向连接的对应规律。 示例1:…

python中的可迭代对象

迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始访问&#xff0c;直到所有的元素被访问完结束。迭代器只能往前不会后退。 1. 可迭代对象 我们已经知道可以对list、tuple、str等类型的数据使⽤for...in...的循环语…

二叉排序树删除子节点以及遍历

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef int TElemType; int m,n; typedef struct BiTNode {//树节点的建立 TElemType data ;struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int SearchBST(BiTree T,int key,BiTree f,BiTr…

LeetCode 1548. The Most Similar Path in a Graph(动态规划)

文章目录1. 题目2. 解题1. 题目 We have n cities and m bi-directional roads where roads[i] [ai, bi] connects city ai with city bi. Each city has a name consisting of exactly 3 upper-case English letters given in the string array names. Starting at any city…

UAC执行批处理,进行提示

很简单&#xff0c;直接在批处理文件中前面加入下面这段 echo off:: BatchGotAdmin :------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system…

python中的iter()函数与next()函数

list、tuple等都是可迭代对象&#xff0c;我们可以通过iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使⽤next()函数来获取下⼀条数据。iter()函数实际上就是调⽤了可迭代对象的 __iter__ ⽅法。 >>> li [11, 22, …

vs.net打包生成可执行文件的方法

用vs.net对应用打包:1.打开VS.NET开发环境;2."文件"->"新建"->"项目";3."项目类型"选"安装和部署项目","模板"选"Web安装项目",然后填写"名称"和"位置",最后"确定"…

LeetCode 358. K 距离间隔重排字符串(贪心+优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个非空的字符串 s 和一个整数 k&#xff0c;你要将这个字符串中的字母进行重新排列&#xff0c;使得重排后的字符串中相同字母的位置间隔距离至少为 k。 所有输入的字符串都由小写字母组成&#xff0c;如果找不到距离至少为 k 的重排结果…