Google 面試題 陣列的度數

2021-09-11 09:07:08 字數 1513 閱讀 1551

專欄 | 九章演算法

** |

三角形分割線

給定元素全為非負整數的非空陣列nums,陣列的度等於出現最多的元素的次數。找到具有和nums相同的連續子串的最小長度。

1.

input:[1, 2, 2, 3, 1]        

output: 2        

複製**

解釋:nums為2,因為元素1和2都各出現了兩次。和原陣列具有相同的度的連續子串有[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]。其中最短的長度為2,所以輸出2。

2.

input: [1,2,2,3,1,4,2]        

output: 6

複製**

ⅰ.稍加分析就會發現,目標子串的首元素一定是nums**現最多的元素的第乙個,目標子陣列的尾元素一定是nums中該元素的最後乙個。

ⅱ.這樣問題就轉化為了:求nums**現次數最多的某個元素第一次出現,到最後一次出現的子串的最小長度。

ⅲ.那麼只需一次掃瞄nums,並在掃瞄過程中用乙個map(命名為count)記錄元素值到目前為止出現的次數,再用乙個map(命名為startindex)記錄元素值出現的首位置,用於計算掃瞄到當前元素的子串長度。

ⅳ.同時迴圈中不斷判斷是否更新當前的最大次數frequency。如果最大次數變大了,那麼相應更新子串長度len;如果當前元素的出現次數和最大次數相等,因最大次數相等的元素可任意選擇,所以要選擇長度較小的,故這裡有可能更新len。

ⅴ.map的插入和檢視平均複雜度為o(1),一次掃瞄,故整個演算法平均時間複雜度o(n),空間複雜度o(n)

這道題是一道簡單難度的題目,要求面試者掌握並使用hashmap來統計每個數字的出現次數和起始位置。需要注意的是筆者給出的演算法只需遍歷一遍,把統計最大次數和記錄位置同時完成了。

分割線

精英程式設計師交流社群,定期發布面試題、面試技巧、求職資訊等

Google 的面試題

一輛學校班車裡面能裝多少個高爾夫球?你被縮小到只有硬幣厚度那麼點高 不是壓扁,是按比例縮小 然後被扔到乙個空的玻璃攪拌器中,攪拌刀片一分鐘後就開始轉動。你怎麼辦?要是讓你清洗整個西雅圖的所有窗子,你會收取多少費用?怎麼才能識別出電腦的記憶體堆疊是向上溢位還是向下溢位?你要向你8歲的侄子解釋什麼是資料...

Google 的面試題

google 的面試題 這些應該都屬於智力測試類的題目吧,開始想想答案。一輛學校班車裡面能裝多少個高爾夫球?你被縮小到只有硬幣厚度那麼點高 不是壓扁,是按比例縮小 然後被扔到乙個空的玻璃攪拌器中,攪拌刀片一分鐘後就開始轉動。你怎麼辦?要是讓你清洗整個西雅圖的所有窗子,你會收取多少費用?怎麼才能識別出...

google的面試題

幾星期前,乙個朋友接受了google公司的面試,他透露了面試中的一些問題。順便,我把從其他幾個曾經面試過的人那裡聽來的內容也整理在一起。最大的網際網路公司google的乙份面試題集,看看你是否能夠回答出來。其中很多問題都是開放式的,正確的解答有許多種,所以在這裡就不提供答案了。一輛學校班車裡面能裝多...