譯者 | 彎月 出品 | CSDN(ID:CSDNNews) 這個(gè)世界需要的是開(kāi)發(fā)者,我為什么要在編程競(jìng)賽上花時(shí)間呢? 我自己就是開(kāi)發(fā),但我發(fā)現(xiàn)大多數(shù)開(kāi)發(fā)者(包括許多“非?!庇心芰Φ拈_(kāi)發(fā)者)并不是太擅長(zhǎng)做數(shù)據(jù)結(jié)構(gòu)、算法以及一些通用的問(wèn)題。很可悲的是,許多人只不過(guò)是通過(guò)遵循一些基本的步驟來(lái)開(kāi)發(fā)應(yīng)用程序,或者做一些非常簡(jiǎn)單的軟件,然后稱自己為“程序員”。 這個(gè)時(shí)代人人都能編程,所以深入學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法不再是當(dāng)今學(xué)生們的第一選擇,即使是那些本應(yīng)非常重視這些領(lǐng)域的學(xué)生。 即使是我,作為一個(gè)開(kāi)發(fā)者,也沒(méi)有參加過(guò)太多編程競(jìng)賽,但我還是會(huì)盡量在算法和數(shù)據(jù)結(jié)構(gòu)上多花些時(shí)間,學(xué)習(xí)如何編寫(xiě)高效的代碼,并鼓勵(lì)和推薦所有人都關(guān)注這個(gè)方面。 下面是一些例子,表明數(shù)據(jù)結(jié)構(gòu)、算法和編程競(jìng)賽(一般意義上的)的內(nèi)容能幫助學(xué)生們:
現(xiàn)在進(jìn)入正題。 做編程題時(shí)的五個(gè)步驟 幾天前在做一道編程題時(shí),我發(fā)現(xiàn)我在解題時(shí)都會(huì)遵循一個(gè)固定的模式。我又做了幾道題,并寫(xiě)下了解題前后我腦海中的步驟。很驚訝的是我發(fā)現(xiàn)竟然真的有規(guī)律可循,我甚至都不知道我用了五個(gè)步驟,但有了這五個(gè)步驟,我就能更高效地解題了。 正如我前面說(shuō)過(guò)的,很可能你也會(huì)下意識(shí)地使用這些步驟,但如果你進(jìn)行總結(jié),并意識(shí)地使用后,就會(huì)發(fā)現(xiàn)驚人的區(qū)別。 1.理解并分析問(wèn)題 閱讀題目,開(kāi)始思考題目,可能的話在紙上寫(xiě)下給出的條件和你需要找出的條件。 問(wèn)自己幾個(gè)問(wèn)題:
2.仔細(xì)閱讀示例輸入 仔細(xì)閱讀示例輸入,試著想出更多的示例輸入,這樣能幫你更好地理解題目,而且,這樣能讓你想清楚你的代碼需要處理多少種情況,可能的輸出或輸出范圍是什么。 這里我建議:
然后開(kāi)始處理邊界條件:
3.分解題目 對(duì)于大型問(wèn)題來(lái)說(shuō)這一步非常非常有幫助。這種情況下我建議遵循以下步驟:
4.開(kāi)始解題和寫(xiě)代碼 現(xiàn)在題目已經(jīng)分析完,可以真正編寫(xiě)代碼了。如果不能一次性解完,那么可以先給一個(gè)簡(jiǎn)單的部分寫(xiě)代碼,隨著解決問(wèn)題的深入,你會(huì)逐步發(fā)現(xiàn)更多細(xì)節(jié),從而找出更多的思路。 只需要記住這三點(diǎn),就一定能找到解法:
而且,如果你是在面試中,不要浪費(fèi)時(shí)間去解決整個(gè)題目再告訴面試官,應(yīng)該不斷簡(jiǎn)化問(wèn)題,不斷告訴面試官你解決問(wèn)題的方法。
5.回顧并學(xué)習(xí) 這部分是最重要的!解題完成后,一定要回顧下:代碼能否改進(jìn)?有沒(méi)有另一種解題的方法?
下面是在寫(xiě)完代碼之后應(yīng)該問(wèn)自己的問(wèn)題:
除了這些問(wèn)題之外,還要檢查同一題目其他人的解答,看看別人是怎樣完成的,這個(gè)過(guò)程中你會(huì)學(xué)到很多。 總結(jié) 本文討論了以下五個(gè)步驟:
以上,希望這篇文章可以提高你的解題技巧。
|
|