2018阿里巴巴算法崗位實習面試總結(朋友的面試)

編程題

給一個圓盤分成N個扇形有M個顏色,要求同色不可以相鄰,文有多少種做法。
這裏寫圖片描述

一面

他報的是算法崗位是,所以問了一個算法題,題目是這樣的:給你一個浮點數的集合,隨機取出兩個數做乘積,求乘積的最大值。

  1. 最笨的方法就是O(n*n)去做乘積,然後遍歷得到最大值。
  2. 存在O(n)的做法,遍歷數組把元素按照整數負數分開,假如只存在正數那麼計算前兩大的值去做乘積;假如只存在負數去前量小的去做乘法,假如存在整數和負數分別向前兩種情況處理,關於比較最大數可以使用勝者樹來做,這樣複雜度就是O(n)

這道題還有一個變形,就是求解最小值,其實按照剛剛的思路去考慮即可。

拓展 勝者樹和敗者樹都是完全二叉樹,是樹形選擇排序的一種變型。每個葉子結點相當於一個選手,每個中間結點相當於一場比賽,每一層相當於一輪比賽。
不同的是,勝者樹的中間結點記錄的是勝者的標號;而敗者樹的中間結點記錄的敗者的標號。 勝者樹與敗者樹可以在log(n)的時間內找到最值。任何一個葉子結點的值改變後,利用中間結點的信息,還是能夠快速地找到最值。在k路歸併排序中經常用到。
參考這個鏈接勝者樹與敗者樹

發佈了716 篇原創文章 · 獲贊 30 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章