揭阳企业建站系统模板,摄影网站制作设计,中国网库网站介绍,公司网站建设推广题目描述
有一套系统需升级#xff0c;为减小系统升级期间的影响#xff0c;需根据系统过去一段时间内的每小时平均访问数据#xff0c;来预测
最佳升级时间窗。
现给长度为168#xff08;7*24#xff09;的整数数组#xff0c;表示一个周期#xff08;假设从周一00:…题目描述
有一套系统需升级为减小系统升级期间的影响需根据系统过去一段时间内的每小时平均访问数据来预测
最佳升级时间窗。
现给长度为1687*24的整数数组表示一个周期假设从周一00:00到周日24:00的每小时历史数据最佳升级时间窗选择规则如下 时间窗内累计用户访问量必须大于给定的容忍值。 时间窗必须是连续的x个小时最大的x即为最佳升级时间窗且不超过7*24. 时间窗允许跨周期例如当前周期的第167小时到下一周期的第166axioms是一个长度为168的时间窗。
请计算最佳升级时间窗并返回其开始时间和结束时间的数组下标。如果存在多个最佳升级时间窗返回开始时间下标最小的一个。
解答要求
时间限制1000ms内存限制256MB
输入
第一行为整数n表示给定的升级影响的容忍值取值范围[0, 2^31]。
第二行为7*24个整数表示一个周期7*24的每个小时用户访问量每个值的范围[0, 2^31]。
输出
两个整数分别表示所计算出的最佳升级时间窗的开始时间下标包含和结束时间下标包含不存在时返回 -1 -1 。
样例
输入样例
6
1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1输出样例
22 25编码实现java public static void main(String[] args) {int[] pvByHourWeekly new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};int[] result getBestTimeWindow(pvByHourWeekly, 6);System.out.println(Arrays.stream(result).mapToObj(String::valueOf).collect(Collectors.joining( )));}public static int[] getBestTimeWindow(int[] pvByHourWeekly, int pvErrorTolerance) {int start 0;int end 0;int sum 0;int maxWindow 0;int maxStart -1; // 初始值为-1未找到最佳时间窗口for (int i 0; i pvByHourWeekly.length; i) {sum pvByHourWeekly[i];while (sum pvErrorTolerance) {sum - pvByHourWeekly[start];start;}int windowSize i - start 1;if (windowSize maxWindow) {maxWindow windowSize;maxStart start;end i;}}// 判断是否找到了最佳时间窗口if (maxStart -1) {return new int[]{-1, -1};} else {return new int[]{maxStart, end};}}优化后代码 public static void main(String[] args) {int[] pvByHourWeekly new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};int[] result getBestTimeWindow(pvByHourWeekly, 6);System.out.println(Arrays.stream(result).mapToObj(String::valueOf).collect(Collectors.joining( )));}public static int[] getBestTimeWindow(int[] pvByHourWeekly, int pvErrorTolerance) {int start 0;int end 0;int sum pvByHourWeekly[0];int maxWindow 1;int maxStart -1;for (int i 1; i pvByHourWeekly.length; i) {sum pvByHourWeekly[i];if (sum pvErrorTolerance) {sum - pvByHourWeekly[start];start;}if (i - start 1 maxWindow) {maxWindow i - start 1;maxStart start;end i;}}if (maxStart -1) {return new int[]{-1, -1};} else {return new int[]{maxStart, end};}}输出结果
22 25Process finished with exit code 0