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

请教关于数组
现在假设我有一个数组
[1,2,3,4,5,3,3,1,2,1,1,6,7,5,7]
现在我想统计其中出现次数为1的值的数组
结果为[4,6]
请问有什么(高效&&优雅)的写法么?谢谢
自己写的总感觉不太好看...

------解决方案--------------------
http://www.java2000.net/p9635
参考这个

不过显示时你得反向了,呵呵!
------解决方案--------------------
先排序,再依次找
------解决方案--------------------
如果可以用HashMap就可以采用如下算法:
将数组中的数字作为key,其出现次数作为value进行数组遍历,遍历完后打印出所有value为1的key即可。
------解决方案--------------------
You need to modify a little...
Java code
import java.util.*;

public class FindMostInArray {
    public static void main(String args[]){
        int[] intArray = {1,2,2,3,4,4,5,6,7,7,8,9};
        List<Integer> list = new ArrayList<Integer> ();
        
        String str = "";
        
        for(int i=0; i<intArray.length; i++){
            str += String.valueOf(intArray[i]);
        }

        int MaxCount = 0;
        
        for(int i=0; i<intArray.length; i++){
            String tempString = str.replaceAll(String.valueOf(intArray[i]), "");
            int tempCount = str.length() - tempString.length();
            
            if (tempCount > MaxCount){
                list.clear();
                list.add(intArray[i]);
                MaxCount = tempCount;
            }
            else if((tempCount == MaxCount) && (!list.contains(intArray[i]))){
                list.add(intArray[i]);
            }
        }
        
        System.out.println("The most repeat number is: "+ MaxCount +"\nThe duplicated elements are: "+ list.toString());
    }
}

------解决方案--------------------
import java.util.HashMap;
import java.util.Iterator;

public class OnlyOne {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,3,3,1,2,1,1,6,7,5,7};
HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
for(int i=0; i<arr.length; i++){
hm.put(arr[i], hm.get(arr[i])==null?1:hm.get(arr[i])+1);
}
Iterator<Integer> iter = hm.keySet().iterator();
for(int i=iter.next(); iter.hasNext(); i=iter.next()){
if(hm.get(i) == 1){
System.out.println(i);
}
}
}
}
------解决方案--------------------
直方图统计
hist[arr[i]]=hist[arr[i]]+1;

------解决方案--------------------
6楼的就可以了
觉得不好的话,可以把HashMap改成int[50],然后参考7楼
------解决方案--------------------
代码:
Java code
import java.util.Arrays; 

public class Test {

public static void main(String[] args) {
int[] ta = {1, 2, 3, 4, 5, 3, 3, 1, 2, 1, 1, 6, 7, 5, 7};
int[] r = test(ta, 1);
System.out.println(Arrays.toString(r));
}

public static int[] test(int[] array, int count) {
if (array == null || array.length == 0 || count <= 0) return null;
int max = array[0];
for (int i = array.length - 1, j = 0; i > 0;) {
j = array[i--];
if (j < 0) return null;
if (max < j) max = j;
}
int[] t = new int[max + 1];
for (int i = array.length - 1; i >= 0;) {
t[array[i--]]++;
}
int[] r = new int[max + 1];
int j = 0;
for (int i = t.length - 1; i >= 0; i--) {
if (t[i] == count) r[j++] = i;
}
return Arrays.copyOf(r, j);
}

}