【編程題】微信紅包

牛客網做題鏈接:https://www.nowcoder.com/questionTerminal/fbcf95ed620f42a88be24eb2cd57ec54

題目描述

春節期間小明使用微信收到很多個紅包,非常開心。在查看領取紅包記錄時發現,某個紅包金額出現的次數超過了紅包總數的一半。請幫小明找到該紅包金額。寫出具體算法思路和代碼實現,要求算法儘可能高效。

輸入輸出描述

給定一個紅包的金額數組gifts及它的大小n,請返回所求紅包的金額。
若沒有金額超過總數的一半,返回0。

測試樣例

[1,2,3,2,2],5
2

基本思路

  1. 將紅包數組排序:Arrays.sort(gifts);
  2. 遍歷數組,計算紅包個數。

代碼實現

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運行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章