1. 程式人生 > 其它 >【劍指offer簡單部分9】陣列中出現次數超過一半的數字(java)

【劍指offer簡單部分9】陣列中出現次數超過一半的數字(java)

技術標籤:劍指offerjava資料結構演算法hashmap

題目描述

陣列中有一個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入一個長度為9的陣列{1,2,3,2,2,2,5,4,2}。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。
在這裡插入圖片描述

分析

方法一:暴力破解

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

在這裡插入圖片描述
方法二:HashMap
我們以後只要是計算重複數字次數,與重複數字,重複字元有關的都可以考慮用java中的HashMap

import java.util.Map;
import java.util.HashMap;
public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        Map<
Integer, Integer>
map = new HashMap<>(); //1、將陣列放入HashMap中 for(int key : array){ map.put(key, map.getOrDefault(key,0) + 1 );//map.getOrDefault方法:當Map集合中有這個key時,就使用這個key值,如果沒有就使用預設值defaultValue } //2、從HashMap中獲取key,判斷其出現次數是否超過陣列長度的一半 //map.keySet()為獲取key集,也就是數字 for(int key : map.keySet()){ //獲取map.get(key)對應的value值,即數字重複出現的次數 if(map.get(key) > array.length / 2){ return key; } } return 0; } }

在這裡插入圖片描述