其他分享
首页 > 其他分享> > 6.4: 一个数组中有一种数出现K次,其它数都出现了M次,M>1, K<M,找到出现K次的数,要求,额外空间复杂度O(1),时间复杂度O(N)

6.4: 一个数组中有一种数出现K次,其它数都出现了M次,M>1, K<M,找到出现K次的数,要求,额外空间复杂度O(1),时间复杂度O(N)

作者:互联网

6.4: 一个数组中有一种数出现K次,其它数都出现了M次,M > 1, K < M,找到出现K次的数,要求,额外空间复杂度O(1),时间复杂度O(N)

 

例如:arr[]  其中2出现K次,9出现M次,M != 1,M > 1, K < M。

 1     // 请保证arr中,只有一种数出现了K次,其它数都出现的M次
 2     public static int onlyKTimes(int[] arr, int k, int m) {
 3         int[] t = new int[32];
 4         // t[0] 0位置的1出现了几个
 5         // t[i] i位置1出现了几个
 6         for (int num : arr) {
 7             for (int i = 0; i < 32; i++) {
 8                 t[i] += (num >> i) & 1;
 9             }
10         }
11         int ans = 0;
12         for (int i = 0; i < 32; i++) {
13             if (t[i] % m != 0) { // 在第i位上有1
14                 ans |= (1 << i);
15             }
16         }
17         return ans;
18     }
19     
 1 public static int test(int[] arr, int k, int m) {
 2         HashMap<Integer, Integer> map = new HashMap<>();
 3         for(int num : arr) {
 4             if(map.containsKey(num)) {
 5                 map.put(num, map.get(num)+1);
 6             } else {
 7                 map.put(num, 1);
 8             }
 9         }
10         //遍歷哈希表
11         for(int num:map.keySet()) {
12             if(map.get(num) == k) {
13                 return num;
14             }
15         }
16         return -1;
17     }

 

标签:map,arr,num,int,复杂度,数都,6.4,出现
来源: https://www.cnblogs.com/yzmarcus/p/16224903.html