leetcode LCP 11. 期望個數統計

【題目】LCP 11. 期望個數統計

某互聯網公司一年一度的春招開始了,一共有 n 名面試者入選。每名面試者都會提交一份簡歷,公司會根據提供的簡歷資料產生一個預估的能力值,數值越大代表越有可能通過面試。
小 A 和小 B 負責審覈面試者,他們均有所有面試者的簡歷,並且將各自根據面試者能力值從大到小的順序瀏覽。由於簡歷事先被打亂過,能力值相同的簡歷的出現順序是從它們的全排列中等可能地取一個。現在給定 n 名面試者的能力值 scores,設 X 代表小 A 和小 B 的瀏覽順序中出現在同一位置的簡歷數,求 X 的期望。
在這裏插入圖片描述
示例 1:

輸入:scores = [1,2,3]
輸出:3
解釋:由於面試者能力值互不相同,小 A 和小 B 的瀏覽順序一定是相同的。X的期望是 3 。

示例 2:

輸入:scores = [1,1]
輸出:1
解釋:設兩位面試者的編號爲 0, 1。由於他們的能力值都是 1,小 A 和小 B 的瀏覽順序都爲從全排列 [[0,1],[1,0]] 中等可能地取一個。如果小 A 和小 B 的瀏覽順序都是 [0,1] 或者 [1,0] ,那麼出現在同一位置的簡歷數爲 2 ,否則是 0 。所以 X 的期望是 (2+0+2+0) * 1/4 = 1

示例 3:

輸入:scores = [1,1,2]
輸出:2

限制:
1 <= scores.length <= 10^5
0 <= scores[i] <= 10^6

【解題思路1】求不同數字的個數

官方題解
在這裏插入圖片描述
對於能力值相同的組合 [1, 1, 1],其中 0/1/2 位置上相同的概率均爲 1/3, 每個位置相同表示出現一個相同,即:
0: 1/3 * 1
1: 1/3 * 1
2: 1/3 * 1
E(x) = 1/3 + 1/3 + 1/3 = 1

對於 n 有:
0: 1/n * 1
1: 1/n * 1

n-1: 1/n * 1

E(x) = 1/n + 1/n + 1/n … (n 個) = 1
即求不同數字的個數

class Solution {
    public int expectNumber(int[] scores) {
        Set<Integer> set = new HashSet<>();
        for(int v : scores) set.add(v);
        return set.size();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章