解决方案 »

  1.   

    不能用两个MAP吗? int[] arr = { 1, 2, 2, 1, 4, 3, 3, 4, 3 };
    HashMap<Integer, Integer> m = new HashMap<Integer, Integer>();
    // int count = 1;
    // 用来记录每个数字出现的次数
    HashMap<Integer, Integer> repeatCount = new HashMap<Integer, Integer>();
    for (int i = 0; i < arr.length; i++) {
    int tep = arr[i];
    int count = 1;
    // 判定是否存在
    if (repeatCount.containsKey(tep)) {
    count = repeatCount.get(tep) + 1;
    repeatCount.put(tep, count);
    } else {
    repeatCount.put(tep, 1);
    }
    System.out.print(tep * count);
    }
      

  2.   


    没想到用两个map。谢谢了
      

  3.   

    可以啊,你也用了一个map,没考虑的map现有的方法
      

  4.   

    public static void main(String[] args) {
     int [] arr = {1,2,2,2,4,3,3,4,3};         
     HashMap<Integer,Integer> m =new HashMap<Integer,Integer>();         
     int count=1; 
     m.put(0,arr[0]);
     for (int i = 1; i < arr.length; i++) {             
     int tep=arr[i];             
     for (int j = 0; j < i; j++) {                 
     if(tep!=arr[j])
     {                 }
     else{                     
     count ++;                     
     m.put(i, arr[i]*count);                 
     }             
     }             
     count=1;         
     }         
     Iterator<Integer> iter = m.keySet().iterator();         
     while (iter.hasNext()) {             
     int key = iter.next();             
     int value =  m.get(key);             
     arr[key] = value;         
     }         
     System.out.println(m);         
     for(int i=0;i<arr.length;i++){             
     System.out.print(arr[i] + " ");         
     }  }
      

  5.   

    你的算法复杂,完全没有必须用两个循环,下面是我的代码,可以满足你的要求:public static void main(String[] args) { int [] arr = {1,2,2,1,4,3,3,4,3};//{1,2,2,1,4,3,3,4,3,3,3};
    int[] num = new int[arr.length];
    Map<Integer,Integer> m = new HashMap<Integer,Integer>();
    for(int i = 0 ; i < arr.length ; i++){
    if( m.get(arr[i]) == null){
    m.put(arr[i], 1);
    num[i] = arr[i];
    }else{
    int temp = m.get(arr[i]);
    m.put(arr[i], temp + 1);
    num[i] = arr[i] * (temp + 1);
    }
    }

    for (int i = 0 ; i < num.length ; i++){
    System.out.print(num[i] + "    ");
    } }
      

  6.   

    我看了你的代码,就是第二个for语句有问题,只要多余两个数他都会当做第二个,
    改了一下你的语句供参考
    for (int j = i+1; j < arr.length; j++) {
    if(tep!=arr[j]||tep==-1){
    }else{
    count ++;
    m.put(j, arr[j]*count);
    arr[j] = -1;
    }
    }
      

  7.   


    int [] arr = {1,2,2,1,4,3,3,4,3};
    Map<Integer,Integer> m =new HashMap<Integer,Integer>();
    for (int i = 0; i < arr.length; i++) {
    if(m.containsKey(arr[i])) {
    m.put(arr[i], m.get(arr[i])+1);
    arr[i] = m.get(arr[i])*arr[i];
    } else {
    m.put(arr[i], 1);
    }
    }