1. 程式人生 > >[劍指offer]陣列中出現一半的數字

[劍指offer]陣列中出現一半的數字

在這裡插入圖片描述
思路:
方法一:
用hashmap儲存數字以及出現的次數,遍歷陣列,找到該數字時就將value+1,在遍歷前判斷value值是否大於陣列長度的一半
方法二:
先對陣列排序,在陣列中間的數即為所求的數
實現:
方法一:

import java.util.HashMap;
public class Solution {
    private HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
    public int MoreThanHalfNum_Solution(int [
] array) { int len = array.length; if( len == 1 ) return array[0]; for(int i = 0 ; i < len; i++ ){ if(map.get(array[i]) != null){ int p = map.get(array[i])+1; if( p > (len/2) ) return array[i] ; map.put(array[i],p)
; continue; } map.put(array[i],1); } return 0; } }

方法二:

import java.util.Arrays;
 
public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        Arrays.sort(array);
        int count=0;
         
        for(int
i=0;i<array.length;i++){ if(array[i]==array[array.length/2]){ count++; } } if(count>array.length/2){ return array[array.length/2]; }else{ return 0; } } }