一个ArrayList里按升序储存一些数字 比如 3,3,3,4,4,4,5,5,5,6,7,8 可以重复的数字最多为4个
然后分别放到另外4个ArrayList里
规则:
如果要放入的这个数和这个ArrayList最后一个相等 就放入下一个ArrayList中 以此类推
比如以上排序后应该为:
[3, 4, 5, 6, 7, 8]
[3, 4, 5]
[3, 5]
[3]3,3,3,3,4,4,5,5,5,6,7
应该为:
[3, 4, 5, 6, 7, 8]
[3, 4, 5]
[3, 5]
[3]
我自己写了个算法感觉特笨- -
希望大家教教我怎么写出更好效率更高的
谢谢 private static void DiffRow(ArrayList nums)
{
ArrayList _aa = new ArrayList();
ArrayList _bb = new ArrayList();
ArrayList _cc = new ArrayList();
ArrayList _dd = new ArrayList();
int test = 0;
for (int i = 0; i < nums.size(); i++)
{
test = Integer.parseInt(nums.get(i).toString()); if (_aa.size() == 0)
{
_aa.add(nums.get(i));
}
else
{
if (test != Integer.parseInt(_aa.get(_aa.size() - 1).toString()))
{
_aa.add(nums.get(i));
}
else if (_bb.size() == 0)
{
_bb.add(nums.get(i));
}
else
{
if (test != Integer.parseInt(_bb.get(_bb.size() - 1).toString()))
{
_bb.add(nums.get(i));
}
else if (_cc.size() == 0)
{
_cc.add(nums.get(i));
}
else
{
if (test != Integer.parseInt(_cc.get(_cc.size() - 1).toString()))
{
_cc.add(nums.get(i));
}
else
{
_dd.add(nums.get(i));
}
}
}
} }
System.out.println(_aa);
System.out.println(_bb);
System.out.println(_cc);
System.out.println(_dd);
}
然后分别放到另外4个ArrayList里
规则:
如果要放入的这个数和这个ArrayList最后一个相等 就放入下一个ArrayList中 以此类推
比如以上排序后应该为:
[3, 4, 5, 6, 7, 8]
[3, 4, 5]
[3, 5]
[3]3,3,3,3,4,4,5,5,5,6,7
应该为:
[3, 4, 5, 6, 7, 8]
[3, 4, 5]
[3, 5]
[3]
我自己写了个算法感觉特笨- -
希望大家教教我怎么写出更好效率更高的
谢谢 private static void DiffRow(ArrayList nums)
{
ArrayList _aa = new ArrayList();
ArrayList _bb = new ArrayList();
ArrayList _cc = new ArrayList();
ArrayList _dd = new ArrayList();
int test = 0;
for (int i = 0; i < nums.size(); i++)
{
test = Integer.parseInt(nums.get(i).toString()); if (_aa.size() == 0)
{
_aa.add(nums.get(i));
}
else
{
if (test != Integer.parseInt(_aa.get(_aa.size() - 1).toString()))
{
_aa.add(nums.get(i));
}
else if (_bb.size() == 0)
{
_bb.add(nums.get(i));
}
else
{
if (test != Integer.parseInt(_bb.get(_bb.size() - 1).toString()))
{
_bb.add(nums.get(i));
}
else if (_cc.size() == 0)
{
_cc.add(nums.get(i));
}
else
{
if (test != Integer.parseInt(_cc.get(_cc.size() - 1).toString()))
{
_cc.add(nums.get(i));
}
else
{
_dd.add(nums.get(i));
}
}
}
} }
System.out.println(_aa);
System.out.println(_bb);
System.out.println(_cc);
System.out.println(_dd);
}
那用HashSet判断 能放入 则加入ArrayList
效率不见得比楼主的好,只是多了一种想法package com.test;import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class ArrayListDiffRow {
static List<Integer> list=new ArrayList<Integer>();
static List<Integer> list1=new ArrayList<Integer>();
static List<Integer> list2=new ArrayList<Integer>();
static List<Integer> list3=new ArrayList<Integer>();
static List<Integer> list4=new ArrayList<Integer>();
static Set<Integer> set = new HashSet<Integer>();
public static void main(String[] args) {
list.add(3);
list.add(3);
list.add(3);
list.add(3);
list.add(4);
list.add(4);
list.add(5);
list.add(5);
list.add(5);
list.add(6);
list.add(7);
list.add(8);
list1=diffRow(list);
list2=diffRow(list);
list3=diffRow(list);
list4=diffRow(list);
for (Integer i : list4) {
System.out.println(i);
}
}
public static List<Integer> diffRow(List<Integer> list){
List<Integer> aList=new ArrayList<Integer>();
for (int i=list.size()-1 ;i>=0;i--) {
//能放入set 则添加到aList中
if (set.add(list.get(i))) {//
aList.add(list.get(i));
//去掉已添加的元素
list.remove(i);
}
}
set.clear();//清空set
return aList;
}
}
import java.util.ArrayList;public class Test{
public static void main(String[] args){
ArrayList a=new ArrayList();
int[] num={3,3,3,3,4,4,5,5,5,6,7};
for(int i=0;i<num.length;i++){
a.add(num[i]);
}
ArrayList[] as=new ArrayList[4];
for(int i=0;i<as.length;i++){
as[i]=new ArrayList();
}
///////以下可作为独立方法
for(int i=0,temp=num[0],count=0;i<a.size();i++,count++){
if(temp==(Integer)a.get(i))
as[count].add(a.get(i));
else{
temp=(Integer)a.get(i);
count=-1;
i--;
}
}
////////
for(int i=0;i<as.length;i++){
System.out.println(as[i]);
}
}
}