【劍指offer簡單部分9】陣列中出現次數超過一半的數字(java)
阿新 • • 發佈:2020-12-29
技術標籤:劍指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;
}
}