这种求最长平均值小于所给数的数组下标该怎么解决啊?

服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost,找出数组中最长时间段,如果未找到则直接返回NULL。
输入描述:
输入有两行内容,第一行为{minAverageLost},第二行为{数组},数组元素通过空格(" “)分隔,minAverageLost及数组中元素取值范围为0~100的整数,数组元素的个数不会超过100个。
输出描述:
找出平均值小于等于minAverageLost的最长时间段,输出数组下标对,格式{beginIndex}-{endIndx}(下标从0开始),如果同时存在多个最长时间段,则输出多个下标对且下标对之间使用空格(” ")拼接,多个下标对按下标从小到大排序。
示例:
输入
2
0 0 100 2 2 99 0 2
输出
0-1 3-4 6-7
说明
A、输入解释:minAverageLost=2,数组[0, 0, 100, 2, 2, 99, 0, 2]
B、通过计算小于等于2的最长时间段为:数组下标为0-1即[0, 0],数组下标为3-4即[2, 2],数组下标为6-7即[0, 2],这三个部分都满足平均值小于等2的要求,因此输出0-1 3-4 6-7

原题是这样的,大概就是求最长平均值小于所给数的数组下标,但是我对一些特别的数组没有处理 比如
2
1 1 2 5 1 这一整个数组是可以符合平均值小于等于2的,我想是不是可以用动态规划或者滑动窗口来做,但是想想没有想到解决方式,有没有大佬能给个解题思路。

我的代码;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
public  static void  main(String [] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int minAverageLost = Integer.parseInt(br.readLine());
String[] AverageLosts = br.readLine().split("\\s");
int[] ans = new int[AverageLosts.length];
int sum = 0, count = 0, maxcount = 0;
for (int i = 0; i < AverageLosts.length; i++) {
count++;
sum += Integer.parseInt(AverageLosts[i]);
if (sum <= count * minAverageLost) {
//目的是维护一个ans[]数组,数组为1的时候表示时间段被我们选中
ans[i] = 1;
//这里增加了一个向左的判断,使得如3 1 1里的3能被选中
while(i-count>=0&&(sum+Integer.parseInt(AverageLosts[i-count])<=(count+1) * minAverageLost)){
sum += Integer.parseInt(AverageLosts[i-count]);
ans[i-count] = 1;
count++;
}
maxcount = Math.max(maxcount, count);
} else {
sum = 0;
count = 0;
}
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i <= AverageLosts.length - maxcount; i++) {
if (ans[i] == 1) {
for (int j = 1; j < maxcount; j++) {
if (ans[i + j] == 0) {
i = i + j;
break;
} else if (j == maxcount - 1)
sb.append(i).append("-").append(i + j).append(' ');
}
}
}
System.out.println(sb.toString().trim());
}
}

#华为OD机考#
全部评论
暴力递归进行求和计算,将符合条件的数据都记录下来,最终再过滤筛选.
点赞 回复 分享
发布于 2024-03-28 18:15 北京
这个题没找到原题?
点赞 回复 分享
发布于 2022-09-27 15:03 陕西

相关推荐

04-17 10:16
门头沟学院 Java
小浪_coder:24届很难找了,马上25的都毕业了还有很多没找到的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务