排列前
P1  G1
P2  G2
P3  G3
P4  G2
P5  G2
P6  G4G1相同的P尽量不相邻,如何写呢,有没有最优算法呀 

解决方案 »

  1.   

    List sortedByGlist = ......//首先按G进行排序,并将排序后的对存放到一个列表中LinkedList linkedList = new LinkedList(sortedByGList);//创建一个链表
    int counter = Math.round(Math.floor(listkedList.size()/2));for (int i=0; i<counter; i++) {
      linkedList.add((i*2+1), listedList.last());
      linkedList.removeLast();
    }//到目前为止的linkedList即是你所需要的
      

  2.   

    listedList.last() 不是linklist的方法呀
      

  3.   

    P1       G1
    P2       G1
    P3       G2
    P4       G2
    P5       G3
    P6       G3
    排列后
    P1 G1
    P6 G3
    P2 G1
    P5 G3
    P3 G2
    P4 G2
    通过二分法得到不是最优的啊。
      

  4.   

    1、先将G序列排序,顺序放在一个HashMap中
    2、新建一个HashMap假设为map以保存新的数组,从第1个数开始,前一个与后一个进行比较,如果前后不同,则将前一个加入到新的数组;如果相同,则将前一个加到另一个新的数组假设为map_tmp保存,直到全部比较结束。
    3、在map数组进行如步骤2中的比较,因为G有序,所以map与map_tmp应该也有序(在这里无序也不要紧了),从map_tmp中第一个元素开始,与map中第一个及后一个元素比较,如果均不相同,则将该值插入中间,直至结尾。
    4、最后,map应该就是你需要的其中第二步就是为了提高工作效率,先将不重复的选取出来
      

  5.   

    不懂楼主的意思。。me too
      

  6.   

    同意~bitou(大鹏一日同风起,扶摇直上九万里)的建议也就是说先把相同的放在一起然后在相同的的对象中间加入不同的对象也就起到了分割相同对象的目的