解题思路1:
先将数组排序, 如果存在某个红包金额出现的次数超过红包总数的一半, 那么这个金额数必定在数组的中间, 即mid
将这个数组遍历, 如果出现金额数和mid
相等, 次数count++
判断如果次数count > n / 2
, 说明这个金额数mid
就是题目中所求红包得金额
import java.util.*;
public class Gift {
public int getValue(int[] gifts, int n) {
Arrays.sort(gifts);
int mid = gifts[n / 2];
int count = 0;
for(int g : gifts){
if(g == mid){
count++;
}
}
if(count > n / 2){
return mid;
}
return 0;
}
}
解题思路2:
利用哈希表进行存储
import java.util.*;
public class Gift {
public int getValue(int[] gifts, int n) {
Map<Integer, Integer> map = new HashMap<>();
for(int g : gifts){
if(map.containsKey(g)){
map.put(g, map.get(g) + 1);
}else{
map.put(g, 1);
}
if(map.get(g) > n / 2){
return g;
}
}
return 0;
}
}