2023-07-22:一共有n个项目,每个项目都有两个信息, projects[i] = {a, b}, 表示i号项目做完要a天,但是当你投入b个资源,它就会缩短1天的时间, 你一共有k个资源,你的目
2023-07-22:一共有n个项目,每个项目都有两个信息,
projects[i] = {a, b},
表示i号项目做完要a天,但是当你投入b个资源,它就会缩短1天的时间,
你一共有k个资源,你的目标是完成所有的项目,但是希望总天数尽可能缩短。
在所有项目同时开工的情况下,返回尽可能少的天数。
1 <= n <= 10^5,
1 <= k <= 10^7。
答案2023-07-22:
以下是代码的大致过程和功能描述:
1.导入所需的包:fmt 用于打印输出,math 用于数学运算。
2.定义函数 minDays,该函数接受项目详情和可用资源数量作为输入参数。
3.初始化变量 l 和 r,用于跟踪搜索范围的左右边界。
4.遍历项目列表,并更新 r 的值为当前 r 和项目完成时间 (project[0]) 中的最大值。
5.将变量 m 和 ans 初始化为 r,作为找到的目标最少天数的初始猜测。
6.使用二分搜索算法找到最小天数。重复以下步骤,直到 l 小于等于 r:
计算中间值
m,即l和r的平均值。如果在
m天或更少的时间内完成所有项目所需的总资源量 (yeah(projects, m)) 小于等于可用资源量k,则更新ans为m,并将右边界r调整为m - 1。否则,将左边界
l调整为m + 1。
7.返回 ans 的最终值,表示完成所有项目所需的最少天数。
8.定义 yeah 函数,该函数接受项目详情和天数作为输入参数。
9.初始化变量 ans,用于跟踪所有需要的资源总量。
10.遍历项目列表,并计算超过给定天数的每个项目所需的资源量。
11.将每个项目所需的资源量添加到 ans。
12.返回 ans 的最终值,表示超过给定天数的所有项目所需的资源总量。
13.在 main 函数中,创建一个示例项目数据集 project,其中包含项目的详细信息。
14.将可用资源 k 设置为特定值。
15.打印调用 minDays 函数并传入项目数据集和可用资源作为参数的结果。
总的时间复杂度:
minDays函数中的二分搜索算法的时间复杂度为 O(log(r)),其中 r 是最大项目完成时间。yeah函数中的遍历项目列表的时间复杂度为 O(n),其中 n 是项目的数量。
因此,总的时间复杂度为 O(log(r) + n)。
总的空间复杂度:
空间复杂度主要来自于变量的存储和函数调用的堆栈空间。
不考虑输入数据的空间占用,变量和数据结构的空间复杂度是常数级的,不随输入规模的增长而变化。
函数调用的堆栈空间复杂度是 O(log(r) + n),其中 r 是最大项目完成时间,n 是项目的数量。
因此,总的空间复杂度可以近似为 O(log(r) + n)。
go完整代码如下:
package main
import (
"fmt"
"math"
)
func minDays(projects [][]int, k int) int {
l := 0
r := 0
for _, project := range projects {
r = int(math.Max(float64(r), float64(project[0])))
}
m, ans := r, r
for l <= r {
m = (l + r) / 2
if yeah(projects, m) <= k {
ans = m
r = m - 1
} else {
l = m + 1
}
}
return ans
}
func yeah(projects [][]int, days int) int {
ans := 0
for _, p := range projects {
if p[0] > days {
ans += (p[0] - days) * p[1]
}
}
return ans
}
func main() {
project := [][]int{{1, 2}, {3, 4}, {5, 6}}
k := 4
fmt.Println(minDays(project, k))
}

rust完整代码如下:
fn main() {
let project = vec![vec![1, 2], vec![3, 4], vec![5, 6]];
let k = 4;
println!("{}", min_days(&project, k));
}
fn min_days(projects: &Vec<Vec<i32>>, k: i32) -> i32 {
let mut l = 0;
let mut r = 0;
for project in projects {
r = r.max(project[0]);
}
let mut ans = r;
while l <= r {
let m = (l + r) / 2;
if yeah(projects, m) <= k {
ans = m;
r = m - 1;
} else {
l = m + 1;
}
}
ans
}
fn yeah(projects: &Vec<Vec<i32>>, days: i32) -> i32 {
let mut ans = 0;
for p in projects {
if p[0] > days {
ans += (p[0] - days) * p[1];
}
}
ans
}

c++完整代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int yeah(vector<vector<int>>& projects, int days);
int minDays(vector<vector<int>>& projects, int k) {
int l = 0;
int r = 0;
for (auto project : projects) {
r = max(r, project[0]);
}
int m, ans = r;
while (l <= r) {
m = (l + r) / 2;
if (yeah(projects, m) <= k) {
ans = m;
r = m - 1;
}
else {
l = m + 1;
}
}
return ans;
}
int yeah(vector<vector<int>>& projects, int days) {
int ans = 0;
for (auto p : projects) {
if (p[0] > days) {
ans += (p[0] - days) * p[1];
}
}
return ans;
}
int main() {
vector<vector<int>> projects = { {1, 2}, {3, 4}, {5, 6} };
int k = 4;
int result = minDays(projects, k);
cout << result << endl;
return 0;
}

c完整代码如下:
#include <stdio.h>
int minDays(int projects[][2], int size, int k) {
int l = 0;
int r = 0;
for (int i = 0; i < size; i++) {
r = (projects[i][0] > r) ? projects[i][0] : r;
}
int m, ans = r;
while (l <= r) {
m = (l + r) / 2;
if (yeah(projects, size, m) <= k) {
ans = m;
r = m - 1;
}
else {
l = m + 1;
}
}
return ans;
}
int yeah(int projects[][2], int size, int days) {
int ans = 0;
for (int i = 0; i < size; i++) {
if (projects[i][0] > days) {
ans += (projects[i][0] - days) * projects[i][1];
}
}
return ans;
}
int main() {
int projects[][2] = { {1, 2}, {3, 4}, {5, 6} };
int size = sizeof(projects) / sizeof(projects[0]);
int k = 4;
int result = minDays(projects, size, k);
printf("Result: %d\n", result);
return 0;
}

2023-07-22:一共有n个项目,每个项目都有两个信息, projects[i] = {a, b}, 表示i号项目做完要a天,但是当你投入b个资源,它就会缩短1天的时间, 你一共有k个资源,你的目的更多相关文章
- Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目
Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...
- java项目打jar包的两种情况
链接地址:http://jingyan.baidu.com/article/6b97984d8a6ddc1ca2b0bfa0.html 本文介绍一下java项目打jar包时的两种情况各怎么操作 方 ...
- springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目
一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...
- 70个Python练手项目列表(都有完整教程)
前言: 不管学习那门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从 ...
- 资源限制 ( resource limit 或 rlimit ),是 Linux 内核控制 用户 或 进程 资源占用的机制。
###### https://learn-linux.readthedocs.io/zh_CN/latest/administration/kernel/rlimit.html ########### ...
- 同一个项目,项目名称不一致,这两个项目同时在Eclipse中出现
在Eclispse中,实际同一个项目,项目名称不一致,这两个项目同时在Eclipse中出现. ①打开项目文件夹,找到“.cproject”文件 ② 在<name>节点重命名 ③ 导入Ecl ...
- [WDS] Warnings while compiling. vue 项目运行控制台输出太多警告信息
vue项目运行控制台输出太多警告信息,我们需要vue 忽略警告, 解决方法:找到build/webpack.base.conf.js 文件 注释掉: // ...(config.dev.useEsl ...
- vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版
vuejs目录结构启动项目安装nodejs命令,api配置信息思维导图版 vuejs技术交流QQ群:458915921 有兴趣的可以加入 vuejs 目录结构 build build.js check ...
- 第一个django项目-通过命令行和pycharm两种方式
以本机环境为例,ip地址为172.20.16.148,windows平台,虚拟环境路径为d:\VirtualEnv,项目存放位置为d:\DjangoProject 命令行方式 1.进入虚拟环境创建项目 ...
- 【Python项目】爬取新浪微博个人用户信息页
微博用户信息爬虫 项目链接:https://github.com/RealIvyWong/WeiboCrawler/tree/master/WeiboUserInfoCrawler 1 实现功能 这个 ...
随机推荐
- 如何解决Gridea部分主题不渲染Katex的问题
很多好看的主题因为对象不是信息学,所以忽视了公式,即 \(\LaTeX\) . 导致,如果你想渲染一个 \(n\) ,结果成了 nn 这个简单,导入文件即可. 找到主题文件夹,打开 templates ...
- CSS 点击穿透pointer-events
在项目中,当需要展示一个元素在最顶层,但又不想让它影响下层的交互,可以pointer-events:none pointer-events介绍 pointer-events: auto | none ...
- 第十四届蓝桥杯省赛C++ B组(个人经历 + 题解)
参赛感受 这是我第一次参加蓝桥杯的省赛,虽然没什么参赛经验,但是自己做了很多前几届蓝桥杯的题,不得不说,这一届蓝桥杯省赛的难度相较于之前而言还是比较大的.之前很流行蓝桥杯就是暴力杯的说法,但是随着参赛 ...
- 2021-09-08:每一个项目都有三个数,[a,b,c]表示这个项目a和b乐队参演,花费为c。每一个乐队可能在多个项目里都出现了,但是只能被挑一次。nums是可以挑选的项目数量,所以一定会有nums
2021-09-08:每一个项目都有三个数,[a,b,c]表示这个项目a和b乐队参演,花费为c.每一个乐队可能在多个项目里都出现了,但是只能被挑一次.nums是可以挑选的项目数量,所以一定会有nums ...
- 从GFS到GPT,AI Infra的激荡20年
导读 最近AIGC和LLM的浪潮层层迭起,大有把AI行业过去十年画的饼,一夜之间完全变现的势头.而 AI Infra (构建AI所需的基础设施),也成了讨论的焦点之一.大众对AI Infra的关注点 ...
- Vue 异步通信Axios
使用Axios实现异步通信需要先导入cdn: <script src="https://unpkg.com/axios@1.4.0/dist/axios.min.js"> ...
- 《HTML入门笔记2》
HTML常用标签 分别有:a 标签.img 标签.table 标签.form 标签.input 标签等. a 标签(特别常用) a 标签即超级链接,又叫超链接.一个网站通常由多个页面构成,进入网站时首 ...
- Java关键字break、continue 、return的区别,嵌套循环,数组的概念以及数组案例
一.关键字 break.continue .return的区别 1.break : 用于在switch..case中放置语句块穿透, 用于跳出循环 // 从1-100 遇到7的倍数 break f ...
- spring cloud gateway网关(一)之网关路由
1.gateway相关介绍 在微服务架构中,系统往往由多个微服务组成,而这些服务可能部署在不同机房.不同地区.不同域名下.这种情况下,客户端(例如浏览器.手机.软件工具等)想要直接请求这些服务,就需要 ...
- App性能测试之iTest
本文主要介绍下App性能测试工具iTest_V4.7的使用. 功能简介 1.监控Andorid系统(支持手机,平板,电视,车机等智能终端设备)以及应用app的cpu.内存.流量.电池.帧率.页面耗时等 ...