算法編程題的心得體會

  • 若是是在線筆試,必定要注意問題的規模,面試

    • 這牽涉到算法時間複雜度的要求
    • 也涉及相關數據結構的設計
      • 好比,一道關於郊遊的題目,學生的規模最大才到 10 人;
        再考察學生之間的關係時,顯然能夠使用二維數組bool areFriends[10][10]
  • 若是是現場筆試,則要適時地向面試官提問,關於問題規模和環境的問題;
    提供多種算法解題思路,效率優先 ⇒ 貪心,方案優先 ⇒ 動態規劃;算法

  • 若是是浮點類型,優先選擇使用 double 而不是 float;編程

  • 一些相對高級的用法:好比 C++14 新特性,好比 Lambda 表達式,減小函數的定義(函數式編程),數組

1. 好的編程習慣

  • 將一些邏輯清晰,功能完整、且會重複使用的代碼,從主函數中抽離出來,封裝成獨立的函數;數據結構

    好比多時鐘之間的時鐘同步問題,
    每一次開關的操作對全部時鐘的影響,能夠單獨做爲一個函數,
    是否全部的時鐘都已被校準同步;函數式編程

  • 變量名要有清晰的物理意義;函數

2. 算法實現中

  • 一次遍歷下來,獲取的有用信息可能有多個,不見得必定是區間的最小值,也能夠同時維護區間的和等信息。

3. case 怎麼用

  • 可根據 case 的輸入狀況,設計存儲 case 的數據類型,
    • 若是一段數字,顯然是數組,或者 vector;
    • 若是是一串字符,顯然是 string,或者字符數組;

4. 圍繞變量、數組以及其餘數據結構展開

沒有數據結構也就沒有算法;設計

在進行進一步的算法流程以前,第一步設置合理的數據結構,數據結構能夠複雜的優先隊列,二叉樹,圖的鄰接表,也能夠是簡單的一維、二維數組,結構體。code

好比旅行商問題,固然要考慮,每一個城市結點的訪問狀況,bool visited[n];隊列

相關文章
相關標籤/搜索