[剑指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 }

浙公网安备 33010602011771号