力扣10.5

2187. 完成旅途的最少时间

给你一个数组time ,其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。

每辆公交车可以 连续 完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以 立马开始 下一趟旅途。每辆公交车 独立 运行,也就是说可以同时有多辆公交车在运行且互不影响。

给你一个整数 totalTrips ,表示所有公交车 总共 需要完成的旅途数目。请你返回完成 至少 totalTrips 趟旅途需要花费的 最少 时间。

数据范围

  • 1 <= time.length <= 105
  • 1 <= time[i], totalTrips <= 107

分析

二分答案,存在一个时间t,在小于t的时候公交车无论如何都无法完成任务,而大于等于t的时候肯定有一种方法可以完成任务,因此只需要二分查找这个点,注意一下二分查找的写法

//查找满足条件的最小值
while(l<r){int mid = (l + r) >> 1;if(check(mid)) r = mid;else l = mid + 1;
}
// 满足条件的最大值
while(l < r) {int mid = (l + r + 1) >> 1;if(check(mid)) l = mid;else r = mid - 1;
}

可以这样记

  • l = m i d l=mid l=mid时,下一个 m i d = ( l + r + 1 ) / 2 mid=(l+r+1)/2 mid=(l+r+1)/2
  • l = m i d + 1 l=mid+1 l=mid+1时,下一个 m i d = ( l + r ) / 2 mid=(l+r)/2 mid=(l+r)/2

代码

typedef long long LL;
class Solution {
public:bool check(LL mid, vector<int>& time, LL totalTrips) {LL sum = 0;for(auto k : time) {sum += mid / k;}return sum >= totalTrips;}LL find(LL l, LL r, vector<int>& time, LL totalTrips) {while(l < r) {LL mid = (l + r) >> 1;if(check(mid, time, totalTrips)) r = mid;else l = mid + 1;}return l;}long long minimumTime(vector<int>& time, LL totalTrips) {LL l = 0, r = 1e14 + 5;LL res = find(l, r, time, totalTrips);return res;}
};

1301. 最大得分的路径数目

给你一个正方形字符数组 board ,你从数组最右下方的字符 'S' 出发。

你的目标是到达数组最左上角的字符 'E' ,数组剩余的部分为数字字符 1, 2, ..., 9 或者障碍'X'。在每一步移动中,你可以向上、向左或者左上方移动,可以移动的前提是到达的格子没有障碍。

一条路径的 「得分」 定义为:路径上所有数字的和。

请你返回一个列表,包含两个整数:第一个整数是 「得分」 的最大值,第二个整数是得到最大得分的方案数,请把结果对 10^9 + 7 取余。

如果没有任何路径可以到达终点,请返回 [0, 0]

数据范围

  • 2 <= board.length == board[i].length <= 100

分析

记忆化搜索,令dp[x][y]表示从(x,y)出发到终点的最大数字和

代码

typedef long long LL;
class Solution {
public:const static LL N = 105, mod = 1e9 + 7;int dp[N][N], cnt[N][N];int dx[3] = {-1, -1, 0};int dy[3] = {-1, 0, -1};bool vis[N][N];int n, m;LL dfs(int x, int y, vector<string>& board) {if(dp[x][y]) return dp[x][y];if(x == 0 && y == 0) return dp[x][y] = 0;auto& t = dp[x][y];LL maxx = 0;for(int i = 0; i < 3; i ++ ) {int nx = x + dx[i];int ny = y + dy[i];if(nx < 0 || ny < 0 || nx >= n || ny >= m) continue;if(board[nx][ny] == 'X') continue;if(vis[nx][ny]) continue;vis[nx][ny] = true; LL tmp = dfs(nx, ny, board);if(tmp > maxx) {maxx = tmp;cnt[x][y] = cnt[nx][ny];} else if(tmp == maxx) {cnt[x][y] += cnt[nx][ny];}cnt[x][y] %= mod;vis[nx][ny] = false;}if(cnt[x][y])t += maxx;t %= mod;if(board[x][y] >= '0' && board[x][y] <= '9')t += board[x][y] - '0';// cout << x << " " << y << " " << t << endl;return t;}vector<int> pathsWithMaxScore(vector<string>& board) {n = board.size();m = board[0].size();vis[n - 1][m - 1] = true;cnt[0][0] = 1;dfs(n - 1, m - 1, board);return {dp[n - 1][m - 1], cnt[n - 1][m - 1]};}
};

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

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

相关文章

【Vue】特殊的按键修饰符 tab、ctrl、meta(win键)、alt

当我们在input框中按tab键想触发事件时&#xff0c;发现失去焦点并不会触发事件。 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><script type"text/javascript&quo…

Kubernetes-Operator篇-04-operator部署验证

1、部署命令 这个是很多博客教程都在使用的部署命令&#xff1a; make manifests make install export ENABLE_WEBHOOKSfalse make run我们使用之前的demo来进行部署验证&#xff1a;Kubernetes-Operator篇-02-脚手架熟悉 这里面涉及到的makefile的配置可以参考&#xff1a;…

VS与VSCode的区别

文章目录 1. 什么是 Visual Studio 和 Visual Studio Code&#xff1f;Visual Studio&#xff08;VS&#xff09;Visual Studio Code&#xff08;VS Code&#xff09; 2. 主要区别详解性能和资源占用功能和复杂性扩展和自定义适用场景价格 3. 详细对比总结4. 如何选择适合自己的…

8648 图的深度遍历

### 思路 1. **图的邻接表存储结构**&#xff1a;使用邻接表存储图的顶点和边信息。 2. **基本操作函数**&#xff1a;包括创建图、查找顶点、获取顶点值、获取第一个邻接顶点、获取下一个邻接顶点等。 3. **深度优先遍历&#xff08;DFS&#xff09;**&#xff1a;从某个顶点出…

使用seata管理分布式事务

做应用开发时&#xff0c;要保证数据的一致性我们要对方法添加事务管理&#xff0c;最简单的处理方案是在方法上添加 Transactional 注解或者通过编程方式管理事务。但这种方案只适用于单数据源的关系型数据库&#xff0c;如果项目配置了多个数据源或者多个微服务的rpc调用&…

Java中的break、continue和return语句

break、continue和return break语句引入基本介绍基本语法示意图注意事项练习String字符串的比较 continue跳转控制语句基本介绍基本语法示意图 return跳转控制语句 break语句 引入 随机生成1-100的一个数&#xff0c;直到生成了97这个数&#xff0c;看看你一共用了几次&#…

2019~2023博文汇总目录

2023 大厂实践 - 哈啰&#xff1a;记录一次ElasticSearch的查询性能优化-CSDN博客 Shiro安全框架-CSDN博客 MQ知识点汇总-CSDN博客 工作学习记录-CSDN博客 后端架构师技术图谱-CSDN博客 2020 Elasticsearch相关技术点_elasticsearch技术点-CSDN博客 Kafka相关技术点_kafka…

Redis --- 第三讲 --- 通用命令

一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value &#xff1a; key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…

Python异步编程模型实战教程

在本教程中&#xff0c;我们介绍Python协程以及如何使用Python async和await关键字来创建和暂停协程。这种异步编程模型在处理大量 I/O 操作&#xff08;如网络请求、文件读取等&#xff09;时特别有用&#xff0c;可以避免程序因为等待这些操作而被阻塞。 介绍Python 协程 在…

【基础算法总结】链表篇

目录 一&#xff0c; 链表常用技巧和操作总结二&#xff0c;算法原理和代码实现2.两数相加24.两两交换链表中的节点143.重排链表23.合并k个升序链表25.k个一组翻转链表 三&#xff0c;算法总结 一&#xff0c; 链表常用技巧和操作总结 有关链表的算法题也是一类常见并且经典的题…

Linux命令大全及小例子

撰写一份关于Linux命令大全的详尽报道和分析是一项重要的任务&#xff0c;旨在让读者全面了解Linux命令的用途和应用场景。Linux系统因其强大的命令行工具而闻名&#xff0c;无论是系统管理、文件操作还是网络配置&#xff0c;Linux命令行都提供了灵活且强大的解决方案。以下是…

python字典的pop方法

在Python中&#xff0c;字典&#xff08;dict&#xff09;的 pop 方法用于删除字典中的特定键&#xff08;key&#xff09;并返回该键对应的值。如果键不存在于字典中&#xff0c;可以指定一个默认值返回&#xff0c;否则会抛出 KeyError。 以下是 pop 方法的一些用法示例&…

保险丝基础知识

一、简介 保险丝&#xff08;fuse&#xff09;也被称为电流保险丝&#xff0c;它能够在电流异常升高到一定的高度和热度时&#xff0c;自动熔断切断电流&#xff0c;从而保护电路安全运行。 IEC127标准将它定义为“熔断体&#xff08;fuse-link)”。熔断体是由电阻率比较大而熔…

初识Linux · 文件(1)

目录 前言&#xff1a; 回顾语言层面的文件 理解文件的预备知识 文件和磁盘 使用和认识系统调用函数 前言&#xff1a; 本文以及下篇文章&#xff0c;揭露的都是Linux中文件的奥秘&#xff0c;对于文件来说&#xff0c;初学Linux第一节课接触的就是文件&#xff0c;对于C…

蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推

蓝禾&#xff0c;汤臣倍健&#xff0c;三七互娱&#xff0c;得物&#xff0c;顺丰&#xff0c;快手&#xff0c;游卡&#xff0c;oppo&#xff0c;康冠科技&#xff0c;途游游戏&#xff0c;埃科光电25秋招内推 ①蓝禾 【岗位】国内/国际电商运营&#xff0c;设计&#xff0c;研…

Hive数仓操作(十六)

DML&#xff08;数据操作语言&#xff09;指的是用于操作数据的 SQL 语言部分&#xff0c;主要包括对数据的插入、更新、删除等操作。Hive 的 DML语句主要包括 INSERT、UPDATE 和 DELETE 。以下是一些重要的 Hive DML 语句及其解析。 Hive的DML语句 一、 插入操作INSERT 一般…

在树莓派上部署开源监控系统 ZoneMinder

原文&#xff1a;https://blog.iyatt.com/?p17425 前言 自己搭建&#xff0c;可以用手里已有的设备&#xff0c;不需要额外买。这套系统的源码是公开的&#xff0c;录像数据也掌握在自己手里&#xff0c;不经过不可控的三方。 支持设置访问账号 可以保存录像&#xff0c;启…

《深入理解java虚拟机》——java内存区域与内存溢出异常

我是很喜欢用java语言编写代码的。从开始学习到现在其实也是在一步步体会java语言的各方面&#xff0c;开始看深入理解java虚拟机这本书觉得java虚拟机的内部感觉就像是一个操作系统&#xff0c;也可以说是个计算机。想要深入的理解我觉得需要先从整体去看。为什么需要java虚拟…

ProtoBuf快速上手

文章目录 创建 .proto文件编译 .proto文件编译后生成的文件序列化与反序列化的使用 此篇文章实现内容&#xff1a; 对一个通讯录的联系人信息&#xff0c;使用PB进行序列化&#xff0c;并将结果输出对序列化的内容使用PB进行反序列化&#xff0c;解析联系人信息并输出联系人信…

redis-数据类型

十大数据类型 学习 redis 操作手册 英文 Commands 中文 Redis命令中心&#xff08;Redis commands&#xff09; – Redis中国用户组&#xff08;CRUG&#xff09; 学习方法 举出一个数据结构的应用场景&#xff08;理解数据结构特点&#xff09;&#xff0c;并操作&…