[剑指Offer][数组]数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000。

 

 1 import java.util.Map;
 2 import java.util.HashMap;
 3 
 4 public class Solution {
 5     public int MoreThanHalfNum_Solution(int [] array) {
 6         if(array.length == 0) {
 7             return -1;
 8         }
 9         Map<Integer, Integer> map = new HashMap<>();
10         for(int i = 0; i < array.length; i ++) {
11             Integer num = map.get(array[i]);
12             if(num == null) {
13                 map.put(array[i], 1);
14             } else {
15                 map.put(array[i], num + 1);
16             }
17         }
18         for(Integer key : map.keySet()) {
19             if(map.get(key) > array.length / 2) {
20                 return key;
21             }
22         }
23         return -1;
24     }
25 }
 1 public class Solution {
 2     public int MoreThanHalfNum_Solution(int[] array) {
 3         if(array.length == 0) {
 4             return -1;
 5         }
 6         int head = 0;
 7         int tail = array.length - 1;
 8         while (head < tail) {
 9             if(array[head] != array[tail]) {
10                 array[head] = 0;
11                 array[tail] = 0;
12             }
13             head ++;
14             tail --;
15         }
16         for(int i = 0; i < array.length; i ++) {
17             if(array[i] != 0) {
18                 return array[i];
19             }
20         }
21         return -1;
22     }
23 }

 

posted @ 2021-05-11 21:07  StringBuilder  阅读(53)  评论(0)    收藏  举报