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

2021-09-02 02:27:26 字數 1863 閱讀 6517

本文在再次更新,感謝@phonegap提供另一中解題思路,,感覺那個方法也挺好的,大家可以看一下第三種解決方案。。

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

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

需要注意的考察點:

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

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

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

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

猛一看題目確實不難,但容易犯暈,我的第一思路是直接三個if語言搞定,但仔細想想會有重複輸出,例如,15能被3和5整除,判斷的時候就會出問題,但是自學拍一下if語句就沒啥問題了,例如,把判斷既能被3整除又能被5整除放在乙個條件判斷,下面來看一下具體的**吧。

第二個思路是先判斷一下是否能被3整除,在內層迴圈中再判斷是否能被5整除,如果能就輸出,當然首先要定義乙個中間量。。還是直接看**容易理解。。。

此方法還可以再優化一下,詳情請看結尾。。

我以前談到過用stringbuffer或stringbuilder來優化這個方法,但是很多朋友還不是很理解,下面我把第四種方法羅列出來,如果你還不熟悉stringbuffer或stringbuilder,請參看

stringbuilder和stringbuffer解析

,下面是完整的程式:

方法5:這種方法很也比較簡單,就不多解釋了,請看源**。

方法6:和前邊的思路有點不同,輸出結果也沒有按順序輸出,但是符合題意。。

思路很簡單,我直接上原始碼,如有其它問題,可以聯絡我。。

public static void main(string args)

for (int i = 5; i <= 100; i += 5)

else

}system.out.println(result);

}}

感覺這道題的第三種和第四種,第五種方,第六種法挺不錯的,第六種思路挺不錯的。但是三目運算子在運算的時候也會進行判斷運算,感覺第一種方法簡單明瞭,就是判斷次數過多,第四種執行效率比較高。如果有更好的思路,歡迎**,

public void foo()  else if (ismod3)  else if (ismod5) 

}}

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

首先對於標題我是根據題目原出處寫的,所以如果大家覺得逼格有點高的話,請無視標題。下面上題目 大河輕鬆度,陰溝易翻船。無風無浪的地方,按理說是絕對不該翻船的。可是,就是在大家看似無比簡單的問題上,栽倒無數人。依序遍歷0到100閉區間內所有的正整數,如果該數字能被3整除,則輸出該數字及 標記 如果該數字...

一道百度面試題

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

一道百度面試題

下面這段 是把中英文混合字串 漢字用兩個位元組表示,特點是第乙個位元組的最高位為1 中的大寫字母轉化為小寫字母,請找出其中的bug,注意各種異常情況。for char piterator szword piterator 0 piterator else if piterator a piterat...