有一个数组
a[]={1,1,2,2,2,2,3,3,4,4,4,5,6,7,7,7}
要求把它分成几个数组
b1[]={1,1}
b2[]={2,2,2,2}
b3[]={3,3}
b4[]={4,4,4}
b5[]={5}
b6[]={6}
b7[]={7,7,7}这个算法怎么写啊!
帮帮小弟了!

解决方案 »

  1.   

    需求没有讲清楚,现在是知道有1到1七种情况,所以有了b1到b7,实际上不知道有几种情况,这个bn怎么确定呢?
      

  2.   


    import java.util.ArrayList;public class Test{
    public static void main(String[] args){ 
    int[] a={1,1,2,2,2,2,3,3,4,4,4,5,6,7,7,7};
    ArrayList b = new ArrayList();
    int temp = 99999, bn = -1;
    for(int i =0; i < a.length; i++){
    if(temp != a[i]){
    bn++;
    ArrayList bi = new ArrayList();
    b.add(bi);
    }
    ((ArrayList)b.get(bn)).add(new Integer(a[i]));
    temp = a[i];
    }
    for(int i =0; i < b.size(); i++){
    System.out.println(b.get(i));
    }
    }
    }
    output:
    [1, 1]
    [2, 2, 2, 2]
    [3, 3]
    [4, 4, 4]
    [5]
    [6]
    [7, 7, 7]
      

  3.   

    import java.util.*;
    class  hello 
    { public static void main(String[] args) 
    {
    byte abt[]={1,1,2,2,2,2,3,3,4,4,4,5,6,7,7,7};
    int iMode = 7;
    byte[][] aObj = new byte[iMode][];
    int iIndex = 0;
    byte btTmp = abt[0];  //该值不能和列表中的值一致。
    int iCount = -1;    //相同元素的计数器
    for (int i = 0;i<abt.length ;i++ )

    if (btTmp == abt[i]) iCount++;
    else  
    {
    aObj[iIndex] = new byte[iCount+1];
        for (; iCount >=0 ; iCount-- )
        {
    aObj[iIndex][iCount] = btTmp;
        }
    iIndex++;
    btTmp = abt[i];
    iCount ++;
    }
    }
        aObj[iIndex] = new byte[iCount+1];
    for (; iCount >=0 ; iCount-- )
    {
     aObj[iIndex][iCount] = btTmp;
    } for (int i = 0 ;i < iMode ; i++ )
    {
    System.out.println("the ["+i+"]");
    byte[] abtTmp2 = aObj[i];
     for (int j = 0; j < abtTmp2.length  ; j++ )
     {
     System.out.println(abtTmp2[j]);
     }
    }
    System.out.println("Hello World!");
    }
    }
      

  4.   

    呵呵,才几分钟时间就被抢先了。
    本来也打算用容器类的,但是似乎太小题大做了。
    如果数据都给定了,并且能够给出最大的范围,那么可以用偶的方法。
    如果不是的话,那么可以用hashtable+vector arraylist之类的。
      

  5.   

    import java.util.*;
    class  hello 
    { public static void main(String[] args) 
    {
    int ai[]={1,1,2,2,2,2,3,3,4,4,4,5,6,7,7,7};
    Hashtable hshTable = new Hashtable();
    for (int i = 0 ; i < ai.length ; i++ )
    {
    Integer ITmp = new Integer(ai[i]);
    Vector vtTmp = null;
    if (hshTable.containsKey(ITmp))
    {
    vtTmp = (Vector)(hshTable.get(ITmp));
    }
    else
    {
    vtTmp = new Vector();
    hshTable.put(ITmp,vtTmp);
    }
    vtTmp.add(ITmp);
    }
    System.out.println("Hello World!"+hshTable.toString() );
    }
    }
      

  6.   

    python:
    lst = [1,1,2,2,2,2,3,3,4,4,4,5,6,7,7,7,8]current = None
    newlist = None
    result = []for i in lst:
        if i == current:
            newlist.append(i)
        else:
            if newlist <> None:
                result.append(newlist)
            newlist = [i]
            current = iif newlist <> None and len(newlist) > 0:
        result.append(newlist)for arr in result:
        for k in arr:
            print "%s," % k,
        print
    输出:>pythonw -u "quiz2.py"
    1, 1,
    2, 2, 2, 2,
    3, 3,
    4, 4, 4,
    5,
    6,
    7, 7, 7,
    8,
    >Exit code: 0
      

  7.   

    //优化了一下,简洁但是稍微低效的写法.
    import java.util.*;
    class  hello 
    {
    public static void main(String[] args) 
    {
    int ai[]={1,1,2,2,2,2,3,3,4,4,4,5,6,7,7,7};
    Hashtable hshTable = new Hashtable();
    for (int i = 0 ; i < ai.length ; i++ )
    {
    Integer ITmp = new Integer(ai[i]);
    Vector vtTmp = hshTable.containsKey(ITmp)?(Vector)(hshTable.get(ITmp)):new Vector();
    vtTmp.add(ITmp);
    hshTable.put(ITmp,vtTmp);
    }
    System.out.println("Hello World!"+hshTable.toString() );
    }
    }
    import java.util.*;
    class  hello 
    {
    public static void main(String[] args) 
    {
    int ai[]={1,1,2,2,2,2,3,3,4,4,4,5,6,7,7,7};
    Hashtable hshTable = new Hashtable();
    for (int i = 0 ; i < ai.length ; i++ )
    {
    Integer ITmp = new Integer(ai[i]);
    Vector vtTmp = (Vector)(hshTable.get(ITmp));
    (vtTmp =(null == vtTmp?(new Vector()):vtTmp)).add(ITmp);
    hshTable.put(ITmp,vtTmp);
    }
    System.out.println("Hello World!"+hshTable.toString() );
    }
    }
      

  8.   

    我刚才的输出格式改一下,直接用:print result输出:[[1, 1], [2, 2, 2, 2], [3, 3], [4, 4, 4], [5], [6], [7, 7, 7], [8]]
      

  9.   

    采用hashtable的最大优势还在于不要求给定的数组的元素是顺序的也就是说处理随机元素的时间开销成本是最小的。