int []array={1,1,1,2,3,3,3,3,4,4,6,8,8,10};
上面这个整型数组,是按照从大到小排列,我现在需要把它重组为1.按照相同数的多少排列2,在相同数一样的情况下,按大小排列.
上面的数组需要重新排列成{3,3,3,3,1,1,1,4,4,8,8,2,6,10};我自己写了一个,按递归排列,先排列有4个数相同的,然后递减,3个相同数,2个相同数,但是没写好,在这里请教一下各位了.
谢谢!
上面这个整型数组,是按照从大到小排列,我现在需要把它重组为1.按照相同数的多少排列2,在相同数一样的情况下,按大小排列.
上面的数组需要重新排列成{3,3,3,3,1,1,1,4,4,8,8,2,6,10};我自己写了一个,按递归排列,先排列有4个数相同的,然后递减,3个相同数,2个相同数,但是没写好,在这里请教一下各位了.
谢谢!
public static void main(String[] args) {
/*
* 按照相同数的多少排列2,在相同数一样的情况下,按大小排列.
* 数组需要重新排列成{3,3,3,3,1,1,1,4,4,8,8,2,6,10};
*/
int[] array={1,1,1,2,3,3,3,3,4,4,6,8,8,10};
//创建拷贝数组
int[] copyArray = new int[array.length];
//创建原始数组的每一个元素集合
Set arraySet1=new HashSet();
for(int i =0;i<array.length;i++){
arraySet1.add(array[i]);
}
//创建新Set,记录所有交换过的数字
Set arraySet2 = new HashSet();
//记录拷贝数组的大小
int size=0;
/*
* 当没有对原数组中所有元素进行重排序时,
* 反复循环找出出现次数最多的且没有进行重排序一个值
* 放到新数组中
*/
while(!arraySet2.containsAll(arraySet1)){
Integer num = array[1];
Integer maxNum=null;
int count = 1;
int maxCount=0;
for(int i =1;i<array.length;i++){
if(array[i]==array[i-1]){
count++;
}else{
num=array[i];
count=1;
}
if(count>maxCount&&!arraySet2.contains(num)){
maxCount=count;
maxNum=num;
}
}
int length = size+maxCount;
for(int i=size;i<length;i++){
copyArray[i]=maxNum;
size++;
}
arraySet2.add(maxNum);
}
for(int i=0;i<copyArray.length;i++){
System.out.print(copyArray[i]+" ");
}
}result:3 3 3 3 1 1 1 4 4 8 8 2 6 10