日期:2014-05-20  浏览次数:20540 次

帮忙写个方法
有一数组里面存放的是有序的数字比如:
[1,2,4,5,7,8,9]
要求写一个方法把连续的数字放到一个数组中。
得到的结果为:
[1,2]
[4,5]
[7,8,9]

------解决方案--------------------

public static int[][] subArray(int[] a){
       int len = a.length;
       int outer =0, inner =0;
       int[][] abc = new int[len][];
       int[]  temp = new int[len];
       int cate=0;
       while(outer< len)
       {
           int i=0;
           inner = outer;
           temp[i++]= a[inner];
           while((a[inner+1]- a[inner] ==1) && (inner+1)< len)
           {
               temp[i++] = a[inner+1];
               inner++;
           }
           abc[cate]= new int[i];
           cate++;
           outer = inner +1;  
      }
       return abc;
   }
------解决方案--------------------
1楼代码运行时报越界,改了下:
import java.util.Arrays;
public class SplitArraysCsdn
{
public static void main(String[] args)
{
int[] in={1,2,4,5,7,8,9};
int[][] out=subArray(in);
for(int[] b:out)//显示结果
{
System.out.println(Arrays.toString(b));
}
}
//输入数组必须由小到大排序。
//
public static int[][] subArray(int[] a)
{
       int len = a.length;
       int outer =0, inner =0;
       int[][] abc = new int[len][];
       int[]  temp = new int[len];
       int cate=0;
       while(outer< len)
       {
int i=0;
inner = outer;
temp[i++]= a[inner];
while(((inner+1)< len)&&(a[inner+1]- a[inner] ==1))//换了一下顺序
{
temp[i++] = a[inner+1];
inner++;
}
//abc[cate]= new int[i];
abc[cate]= Arrays.copyOf(temp,i); //去掉无用元素后放入二唯数组。
cate++;
outer = inner +1;
       }
       abc=Arrays.copyOf(abc,cate); //去掉多余的元素。
       return abc;
}
}

------解决方案--------------------