一道淘汰85 面試者的百度開發者面試題

2021-08-27 17:30:29 字數 1215 閱讀 8128

首先對於標題我是根據題目原出處寫的,所以如果大家覺得逼格有點高的話,請無視標題。

下面上題目:

大河輕鬆度,陰溝易翻船。無風無浪的地方,按理說是絕對不該翻船的。可是,就是在大家看似無比簡單的問題上,栽倒無數人。

依序遍歷0到100閉區間內所有的正整數,如果該數字能被3整除,則輸出該數字及『*』標記;如果該數字能被5整除,則輸出該數字及『#』標記;如果該數字既能被3整除又能被5整除,則輸出該數字及『*#』標記。

這道看似非常簡單的題目,卻潛藏著幾個玄機。面試官通過這道題,考察學生在語法、語義、語用以及演算法優化方面的能力。現實告訴我們,通過這一道題目,就可以淘汰85%的面試者。看似殘酷的考察方式,卻也體現出學生在基礎知識、動手能力到思維能力上的差距。

需要注意的考察點:

- 語法:語法的正確書寫,包括格式

- 語義:對迴圈、分支等語義的理解與掌握

- 語用:對變數命名、表示式及語句的組合使用

- 演算法優化:如果要提高執行效率,可以在演算法上尋找突破口,也可以採用空間換時間的通用原則。

對於這種問題,如果不是面試題的話,我想大家一般不會多想,大部分的思路就是乙個迴圈加三個判斷,打完收工。其實如果是0—100的話,確實也不需要過多考慮效能優化問題,因為對於今天的硬體來說這都不是事啊,下面上一般的常規寫法:

for(int i=1;i<=100;i++)else

}

這種常規的寫法,時間複雜度o(n)並沒有得到優化,可以感覺到是一種不好的演算法,通過分析可以看出,它的迴圈次數較多,因此可以通過減少迴圈次數來獲得優化,下面就是我優化過的演算法。

因為先前沒注意看清題目輸出要求,因此做了些小修改,多謝marksaas的提醒。

上**:

//商向下取整

int threeindex = (int) math.floor(100/3);

int fiveindex = (int) math.floor(100/5);

int bothindex = (int) math.floor(100/15);

for(int i=1;i<=threeindex;i++)

可以看出優化過的演算法的時間複雜度為o(n/3),通過計算它們的耗時,我用5000做了測試,發現後者優化過的演算法耗時可以減少50%(

此結果是我的計算機執行的結果,不同的計算機會有些許差異。

面試經之一道淘汰85 面試者的百度開發者面試題

本文在再次更新,感謝 phonegap提供另一中解題思路,感覺那個方法也挺好的,大家可以看一下第三種解決方案。依序遍歷0到100閉區間內所有的正整數,如果該數字能被3整除,則輸出該數字及 標記 如果該數字能被5整除,則輸出該數字及 標記 如果該數字既能被3整除又能被5整除,則輸出該數字及 標記。這道...

百度AI開發者大會總結

edl 彈性深度學習 它可以實現可容錯分布式訓練,彈性分配計算機資源,提公升集群整天利用率,有效降低計算資源成本。edl的設計思路分為以下三點。1.paddlepaddle可容錯非同步訓練。2.kubernetes controller管理訓練任務狀態。3.auto scaler 根據負載自動伸縮訓...

一道百度面試題

給出乙個整型陣列num,對其中的每個元素,輸出在它左側且比它小的最近元素,要求時間複雜度為o n 例如int num 2無左側最近元素 4左側最近的是2 1沒有 3左側最近的是1.分析 建立乙個棧,然後將陣列中的元素從右至左依次壓入棧中。對每個元素,入棧前先檢查棧頂元素是否比它大,若是的話,則該元素...