乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      程序員該怎么做,才能成為 coding 王者?

       小天使_ag 2019-01-30

      每當(dāng)做編程題目時,大多數(shù)人都會靠基本的直覺,遵循一些固定的步驟來有效地解題。不管是有意還是無意,在做編程題目的時你會下意識地遵循一些步驟,在閱讀完這篇文章后你就可以將這些步驟和這篇文章聯(lián)系起來,從而就可以更高效地解題。

      因此在這篇文章中,我將討論解編程題的五個步驟。

      譯者 | 彎月

      出品 | 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é)生們:

      1. 選擇好的大學(xué)

      2. 編寫高質(zhì)量的代碼

      3. 編寫高效率的代碼(時間和空間復(fù)雜度)

      4. 最優(yōu)地使用資源

      5. 邏輯推理

      6. 知名度(編程競賽的學(xué)生可以接觸到巨大的社區(qū))

      7. 機遇(大量的編程競賽)

      8. 編程的過程有無限的樂趣

      “編程教你怎樣面對大問題。”——Jack Dorsey

      現(xiàn)在進入正題。

      做編程題時的五個步驟

      幾天前在做一道編程題時,我發(fā)現(xiàn)我在解題時都會遵循一個固定的模式。我又做了幾道題,并寫下了解題前后我腦海中的步驟。很驚訝的是我發(fā)現(xiàn)竟然真的有規(guī)律可循,我甚至都不知道我用了五個步驟,但有了這五個步驟,我就能更高效地解題了。

      正如我前面說過的,很可能你也會下意識地使用這些步驟,但如果你進行總結(jié),并意識地使用后,就會發(fā)現(xiàn)驚人的區(qū)別。

      1.理解并分析問題

      閱讀題目,開始思考題目,可能的話在紙上寫下給出的條件和你需要找出的條件。

      問自己幾個問題:

      • 能完全理解題目嗎?

      • 能給非專業(yè)人士解釋清楚問題嗎?

      • 需要多少輸入,每個輸入都是什么?

      • 每個輸入帶來的輸出是什么?

      • 能從題目中分解出幾個模塊嗎?

      • 是否擁有足夠的信息?如果沒有,試著再理解一遍題目。

      2.仔細(xì)閱讀示例輸入

      仔細(xì)閱讀示例輸入,試著想出更多的示例輸入,這樣能幫你更好地理解題目,而且,這樣能讓你想清楚你的代碼需要處理多少種情況,可能的輸出或輸出范圍是什么。

      這里我建議:

      • 選擇非常簡單的輸入并找出輸出

      • 選擇更復(fù)雜、更大的輸入,看看輸出是什么,需要多少種用例

      然后開始處理邊界條件:

      • 不提供任何輸入,輸出應(yīng)該是什么

      • 提供非法輸入,輸出應(yīng)該是什么

      3.分解題目

      對于大型問題來說這一步非常非常有幫助。這種情況下我建議遵循以下步驟:

      • 試著手繪一份流程圖或 UML

      • 將問題分解成模塊,或子問題

      • 試著為每個子問題建立獨立的功能

      • 按順序或按需要調(diào)用子問題(很可能一個函數(shù)會調(diào)用另一個函數(shù)),將它們連接起來

      • 如果是真實世界的問題(如管理系統(tǒng)等),試著用類和對象來實現(xiàn)

      4.開始解題和寫代碼

      現(xiàn)在題目已經(jīng)分析完,可以真正編寫代碼了。如果不能一次性解完,那么可以先給一個簡單的部分寫代碼,隨著解決問題的深入,你會逐步發(fā)現(xiàn)更多細(xì)節(jié),從而找出更多的思路。

      只需要記住這三點,就一定能找到解法:

      • 你的起點

      • 你的位置

      • 你的目標(biāo)

      而且,如果你是在面試中,不要浪費時間去解決整個題目再告訴面試官,應(yīng)該不斷簡化問題,不斷告訴面試官你解決問題的方法。

      • 告訴面試官你從哪里入手

      • 告訴他你在思考什么方法

      • 找出你在問題中面臨的最難的部分

      • 有時可以忽略“最難”的部分,從簡單的子問題入手,這樣能給你帶來更多的時間去思考前者

      • 解決完簡單的子問題后,試著用類似的方式解決困難的部分

      • 解題時可能會想出更好的方法,要告訴面試官

      5.回顧并學(xué)習(xí)

      這部分是最重要的!解題完成后,一定要回顧下:代碼能否改進?有沒有另一種解題的方法?

      不要做完就放棄了!這樣等于放棄你找出其他解法的可能性,也放棄了完整地探索問題的機會!

      下面是在寫完代碼之后應(yīng)該問自己的問題:

      1. 這段代碼是否能處理任何輸入(包括邊界情況)?

      2. 有沒有其他方法解決問題?

      3. 代碼是否有效?能否更有效?

      4. 代碼是否可讀?

      5. 如果別人給你這段代碼,你能否理解?

      6. 性能能否提高?

      7. 能否利用其他算法達到更好的結(jié)果?

      除了這些問題之外,還要檢查同一題目其他人的解答,看看別人是怎樣完成的,這個過程中你會學(xué)到很多。

      總結(jié)

      本文討論了以下五個步驟:

      1. 分析并理解問題

      2. 仔細(xì)閱讀示例輸入和用例

      3. 將問題分解成子問題,或函數(shù),或模塊

      4. 開始解題和編程

      5. 解題完成后,回顧代碼是否可以改進,是否有其他解題方法

      以上,希望這篇文章可以提高你的解題技巧。

      原文:https:///how-to-approach-any-coding-problem-9230f3ad6f9

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多