日期:2014-05-17  浏览次数:20807 次

求 合并数组中重复元素 java 算法
有一个数组
oldArray = [1,2,1,3,3,2,9,8,9] 

要求 把所有1 2,3 9 这些重复加起来变成如下
newoldArray = [2,4,6,18,8] 

数组的长度是随机的。

有什么好的 效率比较高的算法吗?

------解决方案--------------------
先排下序,然后判断相邻的是否相等,去掉重复的数。
------解决方案--------------------
探讨

先排下序,然后判断相邻的是否相等,去掉重复的数。

------解决方案--------------------
Java code
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Test20 {

    public static void main(String[] args) {
        int[] old = {1,2,1,3,3,2,9,8,9,};
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int i=0; i<old.length; i++){
            if(map.containsKey(old[i])){
                map.put(old[i], map.get(old[i])+old[i]);
            }else{
                map.put(old[i], old[i]);
            }
        }
        Collection<Integer> coll = map.values();
        Integer[] newInt = new Integer[map.size()];
        coll.toArray(newInt);
        for(Integer i : newInt){
            System.out.println(i);
        }
        
    }
}

------解决方案--------------------
楼上用MAP 是可以的


但如果 仅仅是 int行的数组的话 并且 知道数组中数字的为数

拿数组中数字确定是1为数来说

创建一个 长度是 10的 数组 int[] newArray ;

然后 newArray [oldArray[i]] += oldArray[i]

最后 调整 newArray 到你要的结果数组
------解决方案--------------------
for example

Java code
int[] oldArray = {1,2,1,3,3,2,9,8,9};
Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
for (int i : oldArray) {
    if (map.containsKey(i)) {
        map.put(i, map.get(i)+1);
    } else {
        map.put(i, 1);
    }
}
int[] newArray = new int[map.size()];
int idx = 0;
for (Map.Entry<Integer, Integer> e : map.entrySet()) {
    newArray[idx++] = e.getKey() * e.getValue();
}
System.out.println(Arrays.toString(newArray));