Java 将非连续值的整数数组拆分为几个连续的整数数组

Java 将非连续值的整数数组拆分为几个连续的整数数组,java,Java,使相邻元素结合在一起的方法 如何将“大”分为以下几部分: int[] big = {1,2,3,5,11,12,13,25,26}; 我从以下代码开始: {{1,2,3},{5},{11,12,13},{25,26}} 公共列表getR(){ 整数[]大={1,2,3,5,11,12,13,25,26}; 列表a=新的ArrayList(); 对于(inti=0;i我可以给你伪代码 迭代数组 将第一个元素添加到另一个数组并前进一步 查看当前元素是否为上一个数字+1 如果是,则添加到第二个数组

使相邻元素结合在一起的方法 如何将“大”分为以下几部分:

int[] big = {1,2,3,5,11,12,13,25,26};
我从以下代码开始:

{{1,2,3},{5},{11,12,13},{25,26}}
公共列表getR(){
整数[]大={1,2,3,5,11,12,13,25,26};
列表a=新的ArrayList();

对于(inti=0;i我可以给你伪代码

  • 迭代数组
  • 将第一个元素添加到另一个数组并前进一步
  • 查看当前元素是否为上一个数字+1
  • 如果是,则添加到第二个数组
  • 否则,创建一个新数组并添加到其中
  • 重复步骤3到步骤5,直到结束

  • 现在你有了数组。如果它所有的东西都是连续的,那么你基本上已经为第一个数组创建了一个副本。

    我可以给你伪代码

  • 迭代数组
  • 将第一个元素添加到另一个数组并前进一步
  • 查看当前元素是否为上一个数字+1
  • 如果是,则添加到第二个数组
  • 否则,创建一个新数组并添加到其中
  • 重复步骤3到步骤5,直到结束

  • 现在您有了数组。如果它的所有内容都是连续的,那么您实际上已经为第一个数组创建了一个副本。

    您得到的数组是一个二维数组,Java中允许如下内容

    public List<Integer> getR(){
        Integer[] big = {1,2,3,5,11,12,13,25,26};
        List<Integer> a = new ArrayList<Integer>();
        for(int i=0;i<big.length;i++){
            if(big[i]==big[i+1]-1){
                continue;
            }else{
                //...
            }
            //...
        }
        //...
    }
    
    您可以利用这些信息来形成新的数组


    更新

    int[][] split = new int[4][]; 
    split[0] = new int[3];
    split[1] = new int[1];
    split[1] = new int[3];
    split[1] = new int[2];
    //note: you can use variables instead integer values (like 4, 3, 2, ...) here
    
    List result=new ArrayList();
    列表电流=空;
    for(int i=0;i
    生成的数组是一个二维数组,Java中允许使用以下内容

    public List<Integer> getR(){
        Integer[] big = {1,2,3,5,11,12,13,25,26};
        List<Integer> a = new ArrayList<Integer>();
        for(int i=0;i<big.length;i++){
            if(big[i]==big[i+1]-1){
                continue;
            }else{
                //...
            }
            //...
        }
        //...
    }
    
    您可以利用这些信息来形成新的数组


    更新

    int[][] split = new int[4][]; 
    split[0] = new int[3];
    split[1] = new int[1];
    split[1] = new int[3];
    split[1] = new int[2];
    //note: you can use variables instead integer values (like 4, 3, 2, ...) here
    
    List result=new ArrayList();
    列表电流=空;
    for(int i=0;i
    这里有一种按连续大小对数组排序的方法,还有一种主要的测试方法:

    List<List<Integer>> result = new ArrayList<List<Integer>>();
    List<Integer> curr = null;
    for (int i = 0; i < big.length; i++) {
        if(i == 0 || (big[i] != big[i-1]+1)) { 
            //if the current element is the first element or doesn't satisfy the condition
            curr = new ArrayList<Integer>(); //create a new list and set it to curr
            result.add(curr); //add the newly created list to the result list
        }
        curr.add(big[i]); //add current element to the curr list
    }
    

    以下是按连续大小对数组排序的方法,以及测试该数组的主要方法:

    List<List<Integer>> result = new ArrayList<List<Integer>>();
    List<Integer> curr = null;
    for (int i = 0; i < big.length; i++) {
        if(i == 0 || (big[i] != big[i-1]+1)) { 
            //if the current element is the first element or doesn't satisfy the condition
            curr = new ArrayList<Integer>(); //create a new list and set it to curr
            result.add(curr); //add the newly created list to the result list
        }
        curr.add(big[i]); //add current element to the curr list
    }
    
    import java.util.ArrayList;
    导入java.util.array;
    导入java.util.List;
    公共类测试{
    公共列表getR(){
    整数[]大={1,2,3,5,11,12,13,25,26};
    列表a=Arrays.asList(大);
    List all=new ArrayList();
    对于(int i=0;i
    import java.util.ArrayList;
    导入java.util.array;
    导入java.util.List;
    公共类测试{
    公共列表getR(){
    整数[]大={1,2,3,5,11,12,13,25,26};
    列表a=Arrays.asList(大);
    List all=new ArrayList();
    
    对于(int i=0;i有另一个基于Mena答案的答案

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    
    public class testSth {
    
        public List<List<Integer>> getR(){
        Integer[] big = {1,2,3,5,11,12,13,25,26};
        List<Integer> a = Arrays.asList(big);
        List<List<Integer>> all = new ArrayList<List<Integer>>();
    
        for(int i=0;i<a.size();i++){
            List<Integer> b = new ArrayList<Integer>();
            if(a.get(i)==a.get(i+1)-1){
            b.add(a.get(i));
            }else{
            b.add(a.get(i));
            all.add(b);
            }
        }
        return all;
        }
    }
    
    int[]标志=新的int[big.length];
    int j=0;
    标志[0]=0;
    
    对于(inti=1;i,根据Mena的答案,还有另一个答案

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    
    public class testSth {
    
        public List<List<Integer>> getR(){
        Integer[] big = {1,2,3,5,11,12,13,25,26};
        List<Integer> a = Arrays.asList(big);
        List<List<Integer>> all = new ArrayList<List<Integer>>();
    
        for(int i=0;i<a.size();i++){
            List<Integer> b = new ArrayList<Integer>();
            if(a.get(i)==a.get(i+1)-1){
            b.add(a.get(i));
            }else{
            b.add(a.get(i));
            all.add(b);
            }
        }
        return all;
        }
    }
    
    int[]标志=新的int[big.length];
    int j=0;
    标志[0]=0;
    

    对于(int i=1;iIs,大数组始终按排序顺序排列?是的,它始终按排序顺序排列。:-)唯一的条件是将它们拆分为连续元素。:-)必须有更多的标准,否则你不必做任何事情。你需要的拆分数量是最小的,还是每个块的大小是最大的?@TimBender-同意WSDL部分不重要……但是如果这个问题有额外的要求,就应该提出来。我指的是她说的那部分:“它需要我提供最小和最大int作为参数“。老实说,我不明白她是什么意思,但这似乎是问题的重要部分。我不觉得我在这里骚扰过任何人,但我会在将来考虑你关于潜在家庭作业问题的话。大数组总是按顺序排列吗?是的,它总是按顺序排列的。:-)唯一的标准是将它们拆分为连续元素。:-)必须有更多的标准,否则你不必做任何事情。你需要的拆分数量是最小的,还是每个块的大小是最大的?@TimBender-同意WSDL部分不重要……但是如果这个问题有额外的要求,就应该提出来。我指的是她说的那部分:“它需要我提供最小和最大int作为参数".说实话,我不明白她的意思,但这似乎是问题的一个重要部分。我不觉得我在这里骚扰过任何人,但我会在将来考虑你关于潜在家庭作业问题的话。+1感谢提供伪代码,而不是提供复制/粘贴解决方案谢谢你,Vaishak。我同意非常感谢。如果我能得到这方面的Java代码,我将不胜感激。非常感谢。:-)这听起来像是在做我的家庭作业S@Nancy-针对此类问题(OP没有表现出任何努力),最好不要提供实际的代码。你显然是一个希望有人帮你做作业的学生。这不是本网站的重点。@TimBender即使如此,“我想把这个转换成这个,给我代码”仍然不是网站的目的,是吗?Vaishak的伪代码在当前场景中是完美的。如果OP无法处理数组上的迭代,在他/她获得基本知识之前,他/她可能不应该在任何应用程序上做任何事。+1用于提供伪代码,不提供复制/粘贴解决方案谢谢你,Vais