牛客網做題鏈接:https://www.nowcoder.com/questionTerminal/fbcf95ed620f42a88be24eb2cd57ec54
題目描述
春節期間小明使用微信收到很多個紅包,非常開心。在查看領取紅包記錄時發現,某個紅包金額出現的次數超過了紅包總數的一半。請幫小明找到該紅包金額。寫出具體算法思路和代碼實現,要求算法儘可能高效。
輸入輸出描述
給定一個紅包的金額數組gifts及它的大小n,請返回所求紅包的金額。
若沒有金額超過總數的一半,返回0。
測試樣例
[1,2,3,2,2],5
2
基本思路
- 將紅包數組排序:Arrays.sort(gifts);
- 遍歷數組,計算紅包個數。
代碼實現
import java.util.*;
public class Gift {
public int getValue(int[] gifts, int n) {
int ret = gifts[0]; // 記錄出現最大次數的紅包金額
int count = 0; // 記錄紅包出現的次數
// 對數組排序
Arrays.sort(gifts);
// 遍歷數組找出現最多次的
for(int i = 0; i < gifts.length; i++){
// 統計同一金額的紅包出現的次數
if(ret == gifts[i]){
count++;
}
// 不是同一金額
else{
// 計算上一金額紅包所佔個數,超過一半,直接返回結果
if(count > n/2){
break;
}
else{
ret = gifts[i];
count = 1;
}
}
}
return count > n/2 ? ret : 0;
}
}
在線oj運行結果: