首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >平均值大于数组其余元素平均值的子数组数量

平均值大于数组其余元素平均值的子数组数量
EN

Stack Overflow用户
提问于 2019-04-07 05:51:33
回答 1查看 1.2K关注 0票数 0

我们得到一个大小小于2000的数组

和Ai< 10^6.我知道我们在线性时间内做得更好的bruteforce approach.Can?

我正在检查每个子数组,并将其平均值与其他元素进行比较。

EN

回答 1

Stack Overflow用户

发布于 2019-04-08 12:59:57

代码语言:javascript
运行
复制
public class FindingSubArray {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    int n = in.nextInt();
    int[] arr = new int[n];

    for (int i = 0; i < n; i++) {
        arr[i] = in.nextInt();
    }

    ArrayList<Integer> a = new ArrayList<>();
    ArrayList<Integer> b = new ArrayList<>();

    for (int i = 0; i < n; i++) {
        for (int j = i; j < n; j++) {
            double avg1 = getAverage(i,j,arr);
            double avg2 = getAverageOfRest(i,j,arr);
            //System.out.println(avg1+" "+avg2);
            if(avg1 > avg2) {
                a.add(i+1);
                b.add(j+1);
            }
        }
    }

    System.out.println(a.size());
    for(int i=0;i<a.size();i++){
        System.out.println(a.get(i)+" "+b.get(i));
    }
}

private static double getAverageOfRest(int i, int j, int[] arr) {
    double result = 0;
    int count = 0;

    for(int k=0;k<i;k++) {
        result += arr[k] ;
        count ++;
    }
    for(int k=j+1;k<arr.length;k++) {
        result += arr[k] ;
        count ++;
    }
    if(count > 0)
        return result/count;
    else
        return 0;   
}

private static double getAverage(int i, int j, int[] arr) {
    double result = 0;
    int count = 0;
    for (int k = i; k <= j; k++) {
         result += arr[k] ;
        count ++;
    }

    if(count > 0)
        return result/count;
    else
        return 0;
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55553792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档