日期:2014-05-20  浏览次数:20614 次

java算法
问题描述:将整数数组中重复的数字修改为该数字的值乘以第几次出现,比如1.2.2输出应该是1.2.4

现在我自己写了一个例子:
public static void main(String[] args) {
int [] arr = {1,2,2,1,4,3,3,4};
HashMap<Integer,Integer> m =new HashMap<Integer,Integer>();
int count=1;
for (int i = 0; i < arr.length; i++) {
int tep=arr[i];
for (int j = i+1; j < arr.length; j++) {
if(tep!=arr[j]){
}else{
count ++;
    m.put(j, arr[j]*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] + " ");
}
}

这个例子存在严重的问题,只能判别一个数字重复出现2次,多了就有问题,例如把int [] arr = {1,2,2,1,4,3,3,4,3};改了问题就出现来了,上面的代码输出1 2 4 2 4 3 6 8 6,按问题描述应该是1 2 4 2 4 3 6 9才对,求大神指点!!谢谢
------解决方案--------------------
不能用两个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);
}

------解决方案--------------------
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] + " ");         
 } 

}

------解决方案--------------------
你的算法复杂,完全没有必须用两个循环,下面是我的代码,可以满足你的要求:
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){