原创 編程之美--尋找數組中的最大值和最小值

1、題目:對於一個由N個整數組成的數組,需要比較多少次才能把最大值和最小值找出來? 例如,數組{5,6,8,3,7,9},其中Max=9, Min=3. 解法一: 掃描一遍數組,分別找出最大和最小值,需要比較2N次。 解法二: 一般情況下

原创 編程之美--最短摘要的生成

題目:抽象點說,就是在一個字符串中,找一些目標字符串,找到包含所有目標字符串的最小字符串。題目雖然叫做最短摘要生成,但和實際的搜索snippet的計算還是有比較大的差距的。解法:一種比較好的解法,策略還是使用雙指針。 算法的思想是採用兩個

原创 代碼大全(5)之面向對象設計

設計的層次: 1、劃分成子系統 2、劃分成模塊 3、劃分成子程序 4、子程序內部的設計結構化設計的組成: 1、系統組織。系統被設計成幾個黑盒子,明確定義的子程序和模塊、接口的實現細節對其他子程序來說都是隱含的 2、開發設計的策略 3、評估

原创 代碼大全(9)之軟件測試及調試

單元測試要點: 對每個需求進行測試,以便確保需求得到實現 對和設計有關程序進行測試以確保設計得到了實現 在詳細測試的基礎上對需求和設計測試增加基本測試 不完全測試 善於結構的測試 數據流測試(數據的狀態:已定義數據、已使用數據、已無效的

原创 程序設計的50條感想

1、敏捷開發——在一個高度協作的環境中,不斷地使用反饋進行自我調整和完善 2、閱讀代碼的頻率越高越好 3、使用單元測試 4、迭代和增量式的學習 5、跟蹤技術變化——你不需要精通所有技術,但需要清楚知道行業的方向,從而規劃你的項目和職業生涯

原创 《軟件工程》筆記

——軟件工程 是一門研究應用工程化方法構建和維護有效的、實用的和高質量的軟件的學科。 工程包括了管理、過程和技術三個方面,過程指軟件的開發、維護過程及管理過程。涉及程序設計語言、數據庫、軟件開發工具、系統平臺、標準、設計模式等。 目標:

原创 編程之美--二分查找算法

二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表爲有序表,且插入刪除困難。因此,折半查找方法適用於不經常變動而查找頻繁的有序列表。 首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較

原创 編程之美--不要被階乘嚇倒

1、題目1:給定一個整數N,那麼N的階乘N!末尾有多少個0呢? 例如:N=10,N!=3628800,N!的末尾有兩個0。 直觀想法是:是不是要完整計算出N!的值,如果溢出怎麼辦? 其實,我們可以從“哪些數相乘能得到10”這個角度來考慮。

原创 編程之美--求數組中最長遞增子序列

1、題目:求一個一維數組(N個元素)中最長遞增子序列的長度。 例如,在序列1,-1,2,-3,4,-5,6,-7中,其最長遞增子序列爲1,2,4,6。 根據無後效性的定義,將各階段按照一定的次序排好之後,對於某個給定階段的狀態來說,它以前

原创 __cdecl __fastcall與 __stdcall

__cdecl   __fastcall與   __stdcall   調用約定:   __cdecl   __fastcall與   __stdcall,三者都是調用約定(Calling   convention),它決定以下內容:1)

原创 編程之美--數組循環移位

1、題目:設計一個算法,把一個含有N個元素的數組循環右移K位,要求時間複雜度爲O(N),且只允許使用兩個附加變量。假如數組爲abcd1234,循環右移4位的話,即1234abcd。不妨設k是一個非負的整數,當k爲負整數的時候,右移k位,相

原创 編程之美--最大公約數問題

1、題目:求兩個正整數的最大公約數,如果兩個正整數都很大,有什麼簡單的算法嗎? 解法一:輾轉相除法。 int gcd(int x, int y) { return (!y) ? x : gcd(y, x%y); } 解法二:如果一個

原创 編程之美--求二叉樹中節點的最大距離

計算一個二叉樹的最大距離有兩個情況: 情況A: 路徑經過左子樹的最深節點,通過根節點,再到右子樹的最深節點。情況B: 路徑不穿過根節點,而是左子樹或右子樹的最大距離路徑,取其大者。 只需要計算這兩個情況的路徑距離,並取其大者,就是該二

原创 編程之美--從無頭單鏈表中刪除節點

1、題目:假設有一個沒有頭指針的單鏈表。一個指針指向此單鏈表中間的一個節點(不是第一個,也不是最後一個節點),請將該節點刪除。 假設給定的指針pCurrent,Node* pNext = pCurrent指向Next 。 根據題意,pCu

原创 編程之美--分層遍歷二叉樹

1.輸出二叉樹某一層結點(從左到右) 把輸出二叉樹第K層結點轉換成:分別輸出"以該二叉樹根結點的左右子樹爲根的兩棵子樹"中第K-1層結點。 void PrintNodeAtLevel(Node *root , int level) {