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