這是 LeetCode 上的 「911. 在線選舉」 ,難度為 「中等」。
Tag : 「二分」
給你兩個整數數組 persons 和 times 。
在選舉中,第 i 張票是在時刻為 times[i] 時投給候選人 persons[i] 的。
對於發生在時刻 t 的每個查詢,需要找出在 t 時刻在選舉中領先的候選人的編號。
在 t 時刻投出的選票也將被計入我們的查詢之中。在平局的情況下,最近獲得投票的候選人將會獲勝。
實現 TopVotedCandidate 類:
TopVotedCandidate(int[] persons, int[] times)
使用 persons 和 times 數組初始化對象。int q(int t)
根據前面描述的規則,返回在時刻 t 在選舉中領先的候選人的編號。示例:
輸入:
["TopVotedCandidate", "q", "q", "q", "q", "q", "q"]
[[[0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]], [3], [12], [25], [15], [24], [8]]
輸出:
[null, 0, 1, 1, 0, 0, 1]
解釋:
TopVotedCandidate topVotedCandidate = new TopVotedCandidate([0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]);
topVotedCandidate.q(3); // 返回 0 ,在時刻 3 ,票數分佈為 [0] ,編號為 0 的候選人領先。
topVotedCandidate.q(12); // 返回 1 ,在時刻 12 ,票數分佈為 [0,1,1] ,編號為 1 的候選人領先。
topVotedCandidate.q(25); // 返回 1 ,在時刻 25 ,票數分佈為 [0,1,1,0,0,1] ,編號為 1 的候選人領先。(在平局的情況下,1 是最近獲得投票的候選人)。
topVotedCandidate.q(15); // 返回 0
topVotedCandidate.q(24); // 返回 0
topVotedCandidate.q(8); // 返回 1