12
回答
求一个算法:从一堆重复的数字中,统计各个重复的数字重复了多少次。
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

求一个算法:从一堆重复的数字中,统计各个重复的数字重复了多少次。

比如数字:

1 3 1 3 3 2 5 6 7 5 4 

统计结果:

1 2次

3 3次

。。。

<无标签>
举报
小兴
发帖于4年前 12回/4K+阅
共有12个答案 最后回答: 4年前
import java.util.HashMap;
import java.util.Map;

/**
 * @author luoyh
 * @date Sep 9, 2013
 */
public class T5 {
	
	public static void main(String[] args) {
		count(new int[]{1, 3, 1, 3, 3, 2, 5, 6, 7, 5, 4 });
	}
	
	public static void count(int array[]) {
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		for(int a : array) {
			map.put(a, map.get(a) == null ? 1 : map.get(a) + 1);
		}
		for(int key : map.keySet()) {
			System.out.println(key + ":" + map.get(key));
		}
	}

}
--- 共有 1 条评论 ---
古城锅盔Good! 4年前 回复
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values ($array));
-----------------------------------------------
Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)
--- 共有 1 条评论 ---
苏生不惑php威武 4年前 回复

引用来自“oskiss”的答案

$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values ($array));
-----------------------------------------------
Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)
是用java

 C:

int array[] = {1, 1, 2, 39, ....}

 假设这个数组中的最大值是100.

int count[101];

1). 初始化count的内容为 -1

2). 遍历。

for (int i = 0; i < sizeof(array)/sizeof(array[0]); i++)

{

    if (count[array[i]] == -1) count[array[i]] = 0;

    count[array[i]]++;

}

3). 输出

for (int i = 0; i < 101; i++)

{

if (count[i] != -1)

printf ("%d ==> count: %d\n", i, count[i]);

}

大致思路就是这样。

先把这个构造成一个List,然后将List存到Set中去除重复,对这个Set以及List遍历,获取每个元素重复个数。。
java思路,遍历这个数组 用hashmap当作统计次数的容器,把值当作Key,次数当作value,每遍历一个数,看下map里有没有,如果有,把次数取出来+1,如果没有,则放入map ,这样时间复杂度为O(n)。不知道是不是楼主想要的。

利用js方法。   

   var str='   1 3 1 3 3 2 5 6 7 5 4 3 ';

   var arr=str.replace(/^\s+(.*)\s+$/,'$1').split(' ');//去除左右空格并转换为数组
   var json={};


   for(var i=0;i<arr.length;i++){
      var ret=arr[i];
      if(!json[ret]){
        json[ret]=1;
      }else
      {
       json[ret]++;
      }
   };


   for(var i in json){
      alert('"'+i+'"出现了:'+json[i]+'次')

   };


可以参考一下StringUtils类里测countMatches()方法:

// Count matches
 5228       //-----------------------------------------------------------------------
 5229       /**
 5230        * <p>Counts how many times the substring appears in the larger String.</p>
 5231        *
 5232        * <p>A <code>null</code> or empty ("") String input returns <code>0</code>.</p>
 5233        *
 5234        * <pre>
 5235        * StringUtils.countMatches(null, *)       = 0
 5236        * StringUtils.countMatches("", *)         = 0
 5237        * StringUtils.countMatches("abba", null)  = 0
 5238        * StringUtils.countMatches("abba", "")    = 0
 5239        * StringUtils.countMatches("abba", "a")   = 2
 5240        * StringUtils.countMatches("abba", "ab")  = 1
 5241        * StringUtils.countMatches("abba", "xxx") = 0
 5242        * </pre>
 5243        *
 5244        * @param str  the String to check, may be null
 5245        * @param sub  the substring to count, may be null
 5246        * @return the number of occurrences, 0 if either String is <code>null</code>
 5247        */
 5248       public static int countMatches(String str, String sub) {
 5249           if (isEmpty(str) || isEmpty(sub)) {
 5250               return 0;
 5251           }
 5252           int count = 0;
 5253           int idx = 0;
 5254           while ((idx = str.indexOf(sub, idx)) != -1) {
 5255               count++;
 5256               idx += sub.length();
 5257           }
 5258           return count;
 5259       }

顶部