读书人

请问关于数组

发布时间: 2011-12-24 23:03:24 作者: rapoo

请教关于数组
现在假设我有一个数组
[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);
}

}

输出:

Java code
[6, 4]
[解决办法]
Java code
    public static int[] get1(int[] input) {        // 由于只是编计50以内的东西        // flag代表第i个数字出现了几次        // temp用来存放只出现一次的数字        int[] flag = new int[51];        int[] temp = new int[51];        // 第1次遍历        for (int i : input)            flag[i] += 1;        // 第2次遍历,找出只出现一次的数字        int index = 0;        for (int i = 0; i < flag.length; i++) {            if (flag[i] == 1) {                temp[index++] = i;            }        }        // 数组拷贝,返回确切的数组        int[] result = new int[index];        System.arraycopy(temp, 0, result, 0, index);        return result;    } 

读书人网 >J2SE开发

热点推荐