2022-01-01:给定int[][] meetings,比如 { {66, 70} 0号会议截止时间66,获得收益70 {25, 90} 1号会议截止时间25,获得收益90
2022-01-01:给定int[][] meetings,比如
{
{66, 70} 0号会议截止时间66,获得收益70
{25, 90} 1号会议截止时间25,获得收益90
{50, 30} 2号会议截止时间50,获得收益30
}
一开始的时间是0,任何会议都持续10的时间,但是一个会议一定要在该会议截止时间之前开始,
只有一个会议室,任何会议不能共用会议室,一旦一个会议被正确安排,将获得这个会议的收益。
请返回最大的收益。
答案2022-01-01:
按截止时间从小到大排序,小根堆。
代码用golang编写。代码如下:
package main
import (
"fmt"
"sort"
)
func main() {
meetings := [][]int{{6, 20}, {9, 50}, {13, 42}}
ret := maxScore1(meetings)
fmt.Println(ret)
ret = maxScore2(meetings)
fmt.Println(ret)
}
func maxScore1(meetings [][]int) int {
//Arrays.sort(meetings, (a, b) -> a[0] - b[0]);
sort.Slice(meetings, func(i, j int) bool {
return meetings[i][0] < meetings[j][0]
})
//int[][] path = new int[meetings.length][];
path0 := make([][]int, len(meetings))
for i := 0; i < len(meetings); i++ {
path0[i] = make([]int, 2)
}
size := 0
return process1(meetings, 0, path0, size)
}
func process1(meetings [][]int, index int, path0 [][]int, size int) int {
if index == len(meetings) {
time := 0
ans := 0
for i := 0; i < size; i++ {
if time+10 <= path0[i][0] {
ans += path0[i][1]
time += 10
} else {
return 0
}
}
return ans
}
p1 := process1(meetings, index+1, path0, size)
path0[size] = meetings[index]
p2 := process1(meetings, index+1, path0, size+1)
// path[size] = null;
return getMax(p1, p2)
}
func getMax(a, b int) int {
if a > b {
return a
} else {
return b
}
}
func maxScore2(meetings [][]int) int {
sort.Slice(meetings, func(i, j int) bool {
return meetings[i][0] < meetings[j][0]
})
heap := make([]int, 0)
time := 0
// 已经把所有会议,按照截止时间,从小到大,排序了!
// 截止时间一样的,谁排前谁排后,无所谓
for i := 0; i < len(meetings); i++ {
if time+10 <= meetings[i][0] {
heap = append(heap, meetings[i][1])
sort.Slice(heap, func(i, j int) bool {
return heap[i] < heap[j]
})
time += 10
} else {
if len(heap) > 0 && heap[0] < meetings[i][1] {
heap[0] = meetings[i][1]
sort.Slice(heap, func(i, j int) bool {
return heap[i] < heap[j]
})
}
}
}
ans := 0
for len(heap) > 0 {
ans += heap[0]
heap = heap[1:]
sort.Slice(heap, func(i, j int) bool {
return heap[i] < heap[j]
})
}
return ans
}
执行结果如下:

2022-01-01:给定int[][] meetings,比如 { {66, 70} 0号会议截止时间66,获得收益70 {25, 90} 1号会议截止时间25,获得收益90的更多相关文章
- (五)u-boot2013.01.01 for TQ210:《移植前的准备及u-boot初编译》
移植前的准备 移植前,要做的事情是搭建开发环境以及对U-boot源码的获取.首先说一下开发环境: 1.此次U-boot移植的硬件平台是天嵌的TQ210开发板: CPU:板载核心是S5PV210(Cor ...
- (二)u-boot2013.01.01 for TQ210:《Makefile分析》
当时写的时候看的是2012-10版本的,但是略对比了一遍和2013.01.01没什么改动,所以这不影响对2013.01.01版本的makefile的理解.本文比较侧重于语法句意的分析,框 ...
- (一)u-boot2013.01.01 for TQ210:《Uboot简介》
一直想写一个s5pv210硬件平台的u-boot的移植文档,但一直都忙着没时间写.先写一些u-boot的脚本分析吧,包括makefile,mkconfig,config.mk,主要侧重于语法句意的分析 ...
- org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '2012-12-12 12:01:01': not a valid representation (error: Can not parse date "2012-12-
Jackson对于date的反序列化只支持几种,如果不符合默认格式则会报一下错误 org.codehaus.jackson.map.JsonMappingException: Can not cons ...
- 2015.12.25-2016.01.01 大论文迭代B
大论文B轮迭代,稍重前端 12.25 周五,完善摘要 12.26 周六,完善第一章 12.27 周天,完善第二章 12.28 周一,完善第三章 12.29 周二,完善第四章 12.30 周三,完善第五 ...
- 2019.01.01 bzoj3625:小朋友和二叉树(生成函数+多项式求逆+多项式开方)
传送门 codeforces传送门codeforces传送门codeforces传送门 生成函数好题. 卡场差评至今未过 题意简述:nnn个点的二叉树,每个点的权值KaTeX parse error: ...
- 2019.01.01洛谷 P4725/P4726 多项式对数/指数函数(牛顿迭代)
4725传送门 4726传送门 解析 代码: #include<bits/stdc++.h> #define ri register int using namespace std; in ...
- for循环练习题(1 ,判断任意一个数是91的多少倍 2,编写程序实现给定一个整数判断它从0到这个整数中间出现多少次9的次数)
1 //判断任意一个数是9的多少倍 #include <stdio.h> #include <stdlib.h> int main() { printf("请输入任意 ...
- c/c++ int数组初始化/重置为0
1.int数组其实初始化的时候默认就是全部为0 int a[1000];int a[1000] = {0}; 以上2种写法其实都可以 注意:int a[1000] = {0};这种方法如果想把整形数组 ...
- day 01 常量 注释 int(整型) 用户交互input 流程控制语句if
python的编程语言分类(重点) if 3 > 2: 编译型: 将代码一次性全部编译成二进制,然后再执行. 优点:执行效率高. 缺点:开发效率低,不能跨平台. 代表语言:C 解释型: 逐行解释 ...
随机推荐
- vue 调用 js 获取的今日、本周、本月、本年起始和结束日期
一.得到今天.昨天.明天日期 function getDate(dates) { var dd = new Date(); var n = dates || 0; dd.setDate(dd.getD ...
- 看图就会-react条件渲染的5种方式
- vim指令大全
Linux vi种 wq .wq!.x.q.q!区别 上面的命令只是在vi编辑命令中使用 wq:表示保存退出 wq!:表示强制保存退出 x:表示保存退出 wq和wq!的区别如下: 有些文件设置了只 ...
- Python内置函数:enumerate
enumerate(sequence, [start=0]) enumerate单词本身翻译为列举.枚举. 官方说明: enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组 ...
- 在CentOS上编译最新版linux内核(linux-5.19.9)
从官网下载最新版的Linux内核源码,本教程使用linux-5.19.9进行编译. 实验环境(CentOS-Stream-8) $ uname -a Linux localhost.localdoma ...
- 文件的上传&预览&下载学习(五)
1.背景 一个知识库,要求文件对不同的角色有不同的实现,比如某些角色只能在线预览,某些可以下载.在线观看. 2.分析 知识库其实也可以看做商品表,商品有商品图片(商品表与文件信息表做关联,因为商品有多 ...
- 如何让excel不转换科学技术法
使用场景: 业务部门从系统导出数据给开发人员,打开后数字全部变为科学计数法 参考文章:https://www.zhihu.com/question/20096750
- 65.C++的输入流和输出流
1.流的概念和流类库的结构 程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件. C++输入输出包含以下三个方面的内容: 对系统指定的标准设备的输入和输 ...
- 如何在mac上使用idea做大数据开发
1 软件包下载 jdk1.8 (jdk1.8.0_231) idea(包括2018,2019) (ideaIC-2019.3.3/ideaIC-2018.3.5) 汉化包:汉化包.rar maven3 ...
- XCode汇编调试
开启Xcode汇编调试 选中Always Show Disassembly项. XCode -> Debug -> Debug Workflow -> Always Show Dis ...