char[] arr=new char[]{'a','a','c','a','b','b'};想要实现输出结果为:a,b,c,a,b,a如何实现?

解决方案 »

  1.   

    哦,我还以为是简单的Arrays.sort()呢,原来还有拐弯啊~待我今天去想想~~回来再说~O(∩_∩)O~
      

  2.   

    新建个数组
    对原数组进行遍历
     如果a存在
       则把a存在新数组里,原数组把对应的删掉
     如果b存在
       则把b存在新数组里,原数组把对应的删掉
     如果c存在
       则把c存在新数组里,原数组把对应的删掉

     如果z存在
       则把z存在新数组里,原数组把对应的删掉
    直到原数组的长度为0,退出。
    然后把新数组按顺序打印出来。   
      

  3.   

    把数组从小到大排序(算法自选),然后返回非重复的一组值,如{'a','a','a','b','b','c'}则返回'a','b','c';保留剩下的值,递归调用以上内容,直到数组长度为零
      

  4.   


    public class Test {
    public static void main(String[] args) {
    char[] arr = new char[] { 'a', 'a', 'c', 'a', 'b', 'b' };
    reShortArr(arr);
    for(char i : arr){
    System.out.print(i + "\t");
    } }

    public static void reShortArr(char[] arr){
    int[] arrNum = initArr(arr);
    int index = 0;
    while(arrNum[26] > 0){
    for(int i = 0; i < arrNum.length - 1; i++){
    if(arrNum[i] > 0){
    arr[index++] = (char)(i + 97);
    arrNum[i]--;
    arrNum[26]--;
    }
    }
    }
    }

    private static int[] initArr(char[] ch)
        {
            int[] arrNum = new int[27];
            for(int i = 0; i < ch.length; i++){
             arrNum[ch[i] - 97]++;
            }
            arrNum[26] = ch.length;
            return arrNum;
        }
    }这个代码的效率可以优化下的,楼主自己改下
      

  5.   

    如果数组里的元素改成字符串,
    String[] arr=new String[]{"aa","aa","bc","ad","aa","bc"};想要实现输出结果为:aa,bc,ad,aa,bc,aa如何实现?
      

  6.   

    Java里只能有一个返回值,而且 直到数组长度为零 是无法实现的
    Java里无法改变参数的值,只能改变参数的属性值
    按这种方法的话就得自己定义一个类型,含有两个数组。
    一个是返回的数组,一个是改变后的新数组
    那样就浪费了大量的内存去建数组
      

  7.   

    。看不懂规则
    解决方案和上一个一样就是新建 hash 而后再读出来
    效率上可以优化下  我上边给的代码投机了些,懒的死脑细胞了  呵呵
      

  8.   

    排列规则就是先按字符串数组里的元素不同依次输出
    如:如果数组里的元素改成字符串,
    String[] arr=new String[]{"aa","aa","bc","ad","aa","bc"};想要实现输出结果为(不用排序):输出:
    aa ab bc
    aa bc
    aa
    或是输出
    aa 
    aa ab bc
    aa bc
    等等
      

  9.   

    如果改成二维数组的元素, 是否更直观些。排列规则就是先按字符串数组里的元素不同依次输出
    如:如果数组里的元素改成字符串,
    String[][] arr=new String[][]{{"aa","业务1"},{"aa","业务2"},{"bc","业务3"},{"ad","业务4"},{"aa","业务5"},{"bc","业务6"}};想要实现输出结果为(不用排序):输出:
    aa ab bc
    aa bc
    aa
    或是输出
    aa  
    aa ab bc
    aa bc
    等等
      

  10.   


    何必咬文嚼字呢?就看个思路就成。
    先排序,再用LinkedList弹出每一组无重复的序列,直到LinkedList为空。这个算法对有大量重复数据的数组性能不如你那个hash高。
    但你的那个算法如果是处理String[]而不是char[]的话,还要做很多改进,因为String.hashCode的顺序不能体现String的顺序,必须先对String排序,再用辅助数组存放HashCode才行。而这个算法写起来会很简洁。
      

  11.   

    java有个比较接口  实现它就可以实现自定义排序功能
      

  12.   

    不那么麻烦吧你可以先进行判断 将重复的数组remove移除一个然后按照正常的排序就OK 了
      

  13.   

    char[] arr=new char[]{'a','a','c','a','b','b'};
    先对arr进行排序
    char [][] tmpArr=new char[arr.length][arr.length];
    int[] arrIndex=new int[arr.length];
    int index=0;
    for(int i=0;i<arr.length;i++){//遍历所有的数组
      for(int j=0;j<=index;j++){
        if(j==index){
          ++index;
          arrIndex[j]=0;
          tmpArr[j][arrIndex[j]]=arr[i];
          break;
        }
        if(arr[i]>tmpArr[j][arrIndex[j]]){//这个是按你的规则排序的
          ++arrIndex[j];
          tmpArr[j][arrIndex[j]]=arr[i];
          break;
        }
      }
    }
    大概思路就是这样啦!
      

  14.   

    觉得好像很麻烦!! 
       lz的数据可能是动态的,可能需要考虑到'z',那么就需要很多歌集合对象存入,然后再取出!!
      

  15.   

    对于我刚才写的,本来我是打算用一个verctor 来实现的那样可以解决动态数组的问题了。不过这个只是让提问题的兄弟知道我的思路就行了!具体的他肯定会是完善的!呵呵