网站建设一秒互联,免费发布推广的网站,公司有些网站打不开,戴尔网站建设成功题目 某软件系统会在运行过程中持续产生日志#xff0c;系统每天运行 N 单位时间,运行期间每单位时间产生的日志条数保存在数组 records 中。records[i]表示第 i 单位时间内产生日志条数。由于系统磁盘空间限制,每天可记录保存的日志总数上限为 total 条。如果一天产生的日志总…题目 某软件系统会在运行过程中持续产生日志系统每天运行 N 单位时间,运行期间每单位时间产生的日志条数保存在数组 records 中。records[i]表示第 i 单位时间内产生日志条数。由于系统磁盘空间限制,每天可记录保存的日志总数上限为 total 条。如果一天产生的日志总条数大于 total,则需要对当天内每单位时间产生的日志条数进行限流后保存, 请计算每单位时间最大可保存日志条数 limit以确保当天保存的总日志条数不超过total,对于单位时间内产生日志条数不超过 limit 的日志全部记录保存;对于单位时间内产生日志条数超过 limit 的日志,则只记录保存 limit 条日志;如果一天产生的日志条数总 和小于等于 total,则不需要启动限流机制result 为-1。 请返回 result 的最大值或者-1。 解答要求 时间限制:C/C1000ms,其他语言:2000ms 内存限制:C/C 256MB,其他语 言:512MB 输入 第一行为系统某一天运行的单位时间数 N,1N10^5 第二行为表示这一天每单位时间产生的日志数量的数组 records, 0 records[i]10^5 第三行为系统一天可以保存的总日志条数 total。 1 total 10^9 输出 每单位时间内最大可保存的日志条数 limit, 如果不需要启动限流限制,返回-1. 样例 1 输入: 6 3 3 8 7 10 15 40 输出: 9 解释:系统一天运行 6 单位时间输出的总日志条数为 3387101546,每天可保 存的日志总数上线为 40 条需要进行限制当天 result 9 时单位时间产生超过 9 条的日志只能保存 9 条日志保存的总日志条数为:33879939小于 40 条。 当 result 10 时,需要保存的日志条数为:3387101041,超过了保存上限。所 以每单位时间最大保存日志条数为 9。 样例 2 输入: 5 3 3 5 7 9 40 输出:-1 解释:系统一天运行 5 单位时间产生的总日志条数为 3357927小于一天可保 存的日志条数 总和,不需要进行限制,返回-1. 提示 1N 10^5 0 records[i]10^5 1 total 10^9 参考代码
考察二分查找普通查找的话可能会超时
package RealTest;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;/*** ClassName logFlowLimit* Description TODO* Author 21916* Date 2024/3/14 9:20*/public class logFlowLimit {public static void main(String[] args) throws IOException {Scanner sc new Scanner(System.in);int N sc.nextInt();int[] arr new int[N];for(int i0;iN;i){arr[i] sc.nextInt();}int total sc.nextInt();if(Arrays.stream(arr).sum()total){System.out.println(-1);return ;}// 使用二分查找来确定合适的limitint left 1; // 最小可能的limit至少为1int right 100000; // 最大可能的limit根据题目条件为10^5int result -1;while (left right) {int mid left (right - left) / 2;long currentLogs calculateLogs(arr, mid);if (currentLogs total) {result mid; // 当前limit可行尝试增大limit看是否能找到更大的可行解left mid 1;} else {right mid - 1; // 当前limit不可行需要减小limit}}System.out.println(result);}public static long calculateLogs(int[] records, int limit) {long totalLogs 0;for (int record : records) {totalLogs Math.min(record, limit);}return totalLogs;}
}