求解微信紅包(2016騰訊校招筆試題)

2022-02-20 16:08:26 字數 1076 閱讀 4616

題目描述:

請幫小明找到該紅包金額。寫出具體演算法思路和**實現,要求演算法盡可能高效。

解題思路

這道題看上去感覺挺簡單,最簡單的方法就是分別算出每個紅包金額出現次數,再找出出現次數過半的金額。但是這麼常規做法肯定

超出了題目所給的限制條件(時間複雜度和空間複雜度),儘管題目沒有明確表明。

首先仔細看題目給出的資訊,紅包金額出現次數超過「一半」,為什麼是一半而不是1/3,1/4?因此解題方法肯定是與這個一半有聯絡。

而我們只需要求出該紅包金額是多少就可以了,不需要求出該紅包出現的次數,所以我們求解的時候次數可以加以利用並改變。

最後再想想,演算法盡可能高校,那麼時間複雜度能不能去到o(n)而空間複雜度限制在o(1)呢?意思就是只在原陣列遍歷一次而不申請其他陣列。

分析到這裡,其實就差不多了。

具體的解題方法就是,遍歷原陣列,只要是兩個不同的金額,就直接抵消掉,最後剩哪個就是哪個過半。

python實現**

import

random

defgethalfprice(lst):

money =lst[0]

cnt = 1

for m in lst[1:]:

if money !=m:

cnt -= 1

else

: cnt += 1

if cnt ==0:

money ,cnt = m,1

return money

測試**

gifts = [random.randint(1, 100) for i in range(20) ]

for i in range(10):

print

(gifts)

print(gethalfprice(gifts))

執行結果

[70, 26, 43, 1, 100, 67, 76, 75, 70, 71, 67, 67, 14, 98, 81, 25, 56, 72, 100, 53, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70]

70

騰訊2016校招技術崗面試經歷

關於筆試 只要前期複習到位,筆試還是很好過的,但是當然 分數 越高越好,否則後面會被面試官鄙視的。題目可能難度較大,但是要把會做的 都做 對,如果時間比較緊可以適度屏棄部分不會的題目。關於面試 9.14 晚上6點半 一面 30min 提前乙個小時到了酒店,簽到完就坐那裡等,雖然還沒來得及吃晚飯,但是...

騰訊2016校招筆試題(含答案)

1 父母生了兩個小孩。第乙個是男孩,兩個都是男孩的概率是多少?答案 1 2 解釋 第乙個已經為男孩,第二個只有兩種可能男孩或女孩 概率 1乘二分之一 2 設k1,k2是方陣a的兩個不同的特徵值,a與b是屬於k1,k2的特徵向量,則有a與b是 a 線性相關 b 線性無關 c 對應分量成比例 d 可能有...

關於fork函式的執行問題(源於騰訊校招筆試題目)

1 include include include int main return 0 輸出結果為 8個 2 include include include int main return 0 輸出結果為 6個 很納悶,為什麼乙個 n換行符會對輸出結果產生影響呢?究其原因就得考究fork函式是如何產...