有数组(a,b,b,c,c,c,d,d,d,d)经过某种算法简化成((1,a),(2,b),(4,c),(7,d)).现在有数组 (x1,x2,x2,x3,x3,x3,x4,x4,x4,x4.....xn)根据上面的例子写简化的算法.
求各位大大们解答

解决方案 »

  1.   

    如果相同的都在一起,直接从头到尾遍历不就行了。一个变量记录数目。然后放到List或者数组中。
      

  2.   

    也可以这样试试:定义一个Map<String,Integer>,String为你的x1,x2...,Integer为个数,从第一个开始循环,判断下一个是不是和之前的一个值相同,如果相同,Integer加1,继续判断下一个;如果不相同,直接添加进Map,Integer为1。
      

  3.   

    另一种思想就是查找位置,需要先将数组中不重复元素取出,然后用indexOf,和lastIndexOf查找位置,直接相减然后加1,得到个数。
      

  4.   

    LinkedHashMap map = new LinkedHashMap();
    for(int i=0; i<array.length; i++){
      Integer number = Integer.valueOf(i);
      Integer count = (Integer)map.get(nubmer);
      if(count==null){
        count=Integer.valueOf(0);
      }else{
        count=Integer.valueOf(count.intValue()+1);
      }
      map.put(number, count);
    }
    for(Iterator iter=map.entrySet();iter.hasNext();){
      Map.Entry entry = (Map.Entry)iter.next();
      System.out.println(entry.getValue()+","+entry.getKey());
    }
      

  5.   


    String[] a={"a","b","b","c","c","c","d","d","d","d","f","f","f","f","f"};
    List<String> list = new ArrayList<String>();
    String str = "";
    for(String b : a){
    str+=b;
    }
    int i = 0;
    while(i < a.length){
    str.substring(i);
    int start = str.indexOf(a[i]);
    int end = str.lastIndexOf(a[i]);
    list.add("("+(start+1)+","+a[i]+")");
    i = end +1;
    }
    for(String show : list){
    System.out.println(show);
    }新手写的 可能想法不是很好 楼上那种用map去做的也很不错
      

  6.   

    只要遍历一次数组,记录数组中与前一个元素的值不一样的元素的值及其下标就可以了。
    String[] str={"a","b","b","c","c","c","d","d","d","d",
    "f","f","f","f","f","g","g","g","h","h","h"};
    for(int i=0;i<str.length;i++){
    if(i==0) System.out.println((i+1)+","+str[i]);
    if(i>0){
    if(str[i].equals(str[i-1])) continue;
    System.out.println((i+1)+","+str[i]);
    }
    }
      

  7.   

    字母首次出现的位置坐标,只要遍历一次即可。需要一个辅助Map存放不重复的出现的字母,和它的位置。
      

  8.   

    11楼是好方法,不用消耗额外空间;况且,如果是面试题的话,优先选择“不调用集合API”的简单解法。