algorithm - 返回最大化其(均值 - 中位数)的整数子集

标签 algorithm mean median

一组整数作为输入。您必须返回该集合的子集,以便该子集的均值 - 中位数最大。

示例 1

输入

{1,2,3,4} 

输出

{1,2,4}

例子2

输入

{1,2,2,3,3}

输出

{2,2,3}

最佳答案

package subsetMean_Median;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MySolution {
    public static void main(String[] args) {
        int[] arr= 
            {2,3,2,1,3};
//          {1,3,2,4};
        Arrays.sort(arr);
        int[] outp=meanMedian(arr);
        for(int e:outp) {
            System.out.print(e+"\t");
        }
    }

    protected static int[] meanMedian(int[] arr) {
        double median=findMedian(arr);
        double mean=findMean(arr);
        double diff=median-mean;
        int MAXINDEX=0;
        int n=arr.length;
        double sets=(1<<n);
        System.out.println("sets:"+sets);
        for(int i=1;i<=sets;i++) {
            int[] subset=findSubset(i,arr);
            mean=findMean(subset);
            median=findMedian(subset);
            if(mean -median>diff) {
                diff=mean-median;MAXINDEX=i;
            }
        }
        System.out.println("mean: "+mean+"\tmedian: "+median+"\tdiff: "+diff);
        return findSubset(MAXINDEX,arr);
    }
    protected static int[] findSubset(int counter, int[] arr) {
        int n=arr.length;
        List<Integer> ls=new ArrayList<Integer>();
        for(int j=0;j<n;j++) {
            if((counter & (1<<j))>0) {
                ls.add(arr[j]);
            }
        }
        int[] output= new int[ls.size()];
        for(int j=0;j<ls.size();j++) {
            output[j]=ls.get(j);
        }
        return output;
    }

    protected static double findMean(int[] arr) {
        int n=arr.length;
        double sum=0;
        if(n==0) return 0;
        for(int i=0;i<n;i++)
            sum +=arr[i];
        return (sum/n);
    }

    protected static double findMedian(int[] arr) {
        int n=arr.length;
        if(n%2==1)
            return arr[(n/2)];
        else if(n>=2)
            return 0.5*(arr[((n-2)/2)]+arr[n/2]);
        else return 0;
    }
}


关于algorithm - 返回最大化其(均值 - 中位数)的整数子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49892945/

相关文章:

r - 如何根据面板数据的客户 ID 使用 R 中的中值插补为所有列填充缺失值?

python - 获取中位数对应的索引

sql - 在sql server中查找表中每个日期的中位数

algorithm - 如何决定权重?

java - java中给定压缩文本的lzw解压算法

python - 如何分析DAG时间复杂度?

R:具有特定因子水平的所有案例的平均值

c++ - 如何将具有递减索引的方程式转换为具有求和的数学方程式?

python - CSV Python 列/行平均值

python - scipy stats 几何平均返回 NaN