Java 数据分组问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 数据分组问题相关的知识,希望对你有一定的参考价值。

如:1,2,3,4,5当我输入分组数3,则输出所有可能的分组(注,原始数组的数字不一定是连续的这里只是为了方便,举的特例。原始数组没有重复数字。):
1,2,3,4,5
1,2,3,4,5
1,2,3,4,,5
1,2,3,4,5
1,2,3,4,5....

分组数为3,那么就是两个指针,划分的三个区域即为所求。

好久没做过OJ上的题目了,很水,小范围数据能过,有什么问题一起探讨。

/*
 * 你的是这个数据
  5 3
  1 2 3 4 5
 */


import java.util.Scanner;

public class Main

    public static int N;
    public static int[] array;
    public static int P;
    public static void main(String[] args)
    
        Scanner scan=new Scanner(System.in);
        //N;数组长度
        N=scan.nextInt();
        //P:集合数
        P=scan.nextInt();
        array=new int[N];
        for(int i=0;i<N;i++)
        
            array[i]=scan.nextInt();
        
        //不好确定循环次数,用递归解决
        startDivide(0,P-1,"");
    
    
    public static void startDivide(int start,int deep,String answer)
    
        if(deep==-1)
        
            //将剩余的输出
            for(int i=start;i<Math.min(N-deep,array.length);i++)
            
                answer+=" "+array[i]+" ";
            
            System.out.println(answer+"");
        
        else
        
            //这步貌似有问题?
            if(!answer.equals(""))
            
                answer+="";
            
            if(answer.equals("")||answer.charAt(answer.length()-1)=='')
            
                answer+="";
            
            for(int i=start;i<N-deep;i++)
            
                answer+=" "+array[i]+" ";
                startDivide(i+1, deep-1, answer);
                if(deep==0)
                    break;
            
        
    

追问

这个已经很接近答案了。谢谢。
不过这个只解决了顺序分组的问题。
1,2,3,4,5
而所有的分组包括
1,2,3,4,5
1,2,3,4,5
1,2,3,4,,5
1,2,3,4,5
1,2,3,4,5
还包括,其它
1,3,52,4...就是说,结果中的数字是可以任意组合的。不一定按照原数组的顺序进行组合

追答

这么复杂啊。您应该说清楚些。
集合之间的顺序有要求吗,内部的元素有要求吗

比如
1,3,524和241,3,5是不是一样
1,3,524和1,5,324是不是一样

追问

对不起,没有描述清楚
1,3,524和241,3,5一样
1,3,524和1,5,324也一样

1,2,3,4,5
1,2,3,4,5
1,2,3,4,,5
1,2,3,4,5
1,2,3,4,5
1,32,4,5
1,32,5,4
1,32,4,5
....

追答

不好意思 最近忙 实在没时间想了 你也很厉害啊

参考技术A 能不能说明白点

Java 随机分组

有一组数据,没有其他规律,假如每组需要分4个人,求解决方案,谢谢!

参考技术A 有一组数据,然后你又每组需要分4个人,到底是一组数据还是多组数据呀,不知道你是不是想把一组 数据分成4份?如果是,给你个思路 ,假如你的这组数据是一个字符串数组a,你就循环a的长度次数,每次都产生一个0到a长度之间的随机数,强转成int,并记录到一个新数组里,这样一直循环取,当然,如果新数组里已经记录的数字不要重复记录,保证这个新数组里装的是唯一的数,并且这些数组里的数字,是你字符串数组的a的下标,然后循环新数组,按新数组里的值做下标去取a数组里的字符,a长度假如是20的话,每隔五个就放在一起,这样分成四份,而且取的顺序是新数组的下标来决定的,而新数组的下标又是随机生成的,。。。这样就达到随机将这组数据分成份了 参考技术B 问题可以说的更详细些不?追问

加你Q了,详细聊!

参考技术C 用多线程就可以搞定追问

朋友,能详细点吗,这样我怎么实现呢!

追答

你先把你的要求说详细点。

追问

599758917,你加我Q,我详细跟你说!

以上是关于Java 数据分组问题的主要内容,如果未能解决你的问题,请参考以下文章

分组 Java8 流而不收集它

java 均衡分组问题,分批次分组,每次的组数是固定的,人数不固定,怎么把人数均衡分到固定的组中

java8 小技巧保证分组groupingBy后排序不变

Java 对数据分组

Spark 分组然后排序(Java 代码)

lambda表达式在解决java后台分组排序时的应用