Java使用递归将一个整数按照一定数量分组生成一个数组,实现尽可能的均分

1.核心思想:

①如果这个整数可以整除目标数,则可以直接实现均分。

②如果这个整数无法整除目标数,则需要使用递归思想将两数差值平均分到数组的每个元素上,这样数组之间每个元素的最大差值只能为1,通过此方法保证数组元素尽量均分。

2.代码实现

/**
 * @description //使用递归分组算法为表头指定跨列随机分布
 * @author flw
 * @createTime 2022/7/6 9:31
 * @param array --埋点,存在直接操作数组的情况
 * @param maxSize --需要做随机均分的数
 * @param size --需要随机分布的数组长度
 * @return int[]
 */
protected static int[] getRandomNum(int[] array, int maxSize, int size){
    //定义一个初始长度为size的数组,且元素值为1的数组
    int[] res = new int[size];
    for(int i=0; i<=size -1 ;i++){
        res[i] = 1;
    }
    if(array != null){
        res = array;
    }
    //计算最大数值和当前数值的差值
    int difference = maxSize - size;
    //可以整除操作
    if(difference > 0){
        if(difference > size){
            for(int i=0; i<=size -1 ;i++){
                res[i] = res[i]+1;
            }
            //递归操作
            getRandomNum(res,difference,size);
        }else{
            for(int i=0; i<=difference -1 ;i++){
                res[i] = res[i]+1;
            }
        }
    }
    return res;
}

3.结果验证

public static void main(String[] args) {
    /*将整数7,按照长度为3的数组做随机分布,保证元素差值最小,期望结果【3,2,2】*/
    System.out.println(JSON.toJSONString(getRandomNum(null,7,3)));
}

 

 

4.总结

开发不易,开心自闭,愿每个技术人温暖一生~

 

posted @ 2022-07-28 14:43  故城归人  阅读(1144)  评论(0编辑  收藏  举报