您的位置:首页 > 编程语言 > Java开发

java获取一维数组中连续数字分成几个连续的数字数组

2016-07-09 22:54 746 查看
java获取一维数组中连续数字分成几个连续的数字数组

比如{12,13,14,23,24,34,45,46,47,48,56} 分成【12,13,14】【23,24】【34】【45,46,47,48】【56】等

public static int[][] getContinuousNumber(int[] array)
{
int[][]arrays=new int[array.length][array.length];
//二维数组的i和j
int i=0;
int j=0;
//记录当前最大值为数组的第一个,减一是为了保证后面数组的第一个大于最大值,添加进入二维数组
int max=array[0]-1;
for(int k=0;k<array.length;k++)
{
//当不是连续数字的时候,放到下一个数组里面,并且把j设置为0,最大值为当前值-1
if(array[k]!=max+1)
{
i++;
j=0;
max=array[k]-1;
}
arrays[i][j]=array[k];
max=array[k];
j++;
}
return arrays;
}

public static void main(String[] args) {

int[] array={12,13,14,23,24,34,45,46,47,48,56};
int[][] arrays=lianxushuzi.getContinuousNumber(array);
for(int i=0;i<arrays.length;i++)
{
System.out.println(Arrays.toString(arrays[i]));
}
}

针对上面的情况,二维数组太浪费空间,所以采用list方式去获取连续的数字最大的数组。

这次会获取到【45,46,47,48】

public static Integer[] getMaxContinuousNumber(int[] array)
{
ArrayList<Integer> maxArrays=new ArrayList<Integer>();
ArrayList<Integer> nowArrays=new ArrayList<Integer>();
int max=array[0]-1;
for(int i=0;i<array.length;i++)
{
if(array[i]!=max+1)
{
max=array[i]-1;
nowArrays.clear();
}
nowArrays.add(array[i]);
max=array[i];
if(nowArrays.size()>=maxArrays.size())
{
//maxArrays=nowArrays;这种情况是吧nowdays的地址赋值给了maxarrays的地址,这样以后只要nowarrays的地址改变,maxarrays的值也会改变
maxArrays=(ArrayList<Integer>) nowArrays.clone();
}
}
return (Integer[]) maxArrays.toArray(new Integer[]{});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法