面試題21:調整陣列順序使奇數字於偶數之前
實現乙個函式,輸入乙個整數陣列,調整該陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分;
測試用例:
功能測試:奇數偶數交替出現;全是奇數/偶數;所有偶數在奇數前/奇數在偶數前;
特殊輸入:null;只有乙個數字的陣列;
分析:
1. 維護兩個指標,乙個奇數指標p1,乙個偶數指標p2;p1初始指向開頭,p2初始指向末尾;
2. 如果p1是奇數,p2是偶數,則p1,p2分別向後、前移動一位;
3. 如果p1是奇數,p2是奇數,則p1向後移動,直到遇到偶數,交換p1,p2所指數字;
4. 如果p1是偶數,p2是奇數,交換p1、p2所指數字;
5. 如果p1是偶數,p2是偶數,則p2向前移動,直到遇到奇數,交換p1,p2所指數字;
6. 歸納2到5,如果p1是奇數,向後移動p1直到遇到偶數停止;如果p2是偶數,向前移動p2直到遇到奇數停止;停止p1、p2移動後,交換p1p2所指數字;
7. 直到p1的位置超過p2的位置;
3.4 **的魯棒性
提高**魯棒性的有效途徑是防禦性程式設計;
在函式入口新增驗證輸入是否符合要求的**;
輸入是指標,考慮空指標的情況;輸入是字串,考慮空字串的情況;
面試題22:鍊錶中倒數第k個節點
輸入乙個鍊錶,輸出鍊錶倒數第k個節點;
struct listnode
測試用例:
功能測試:倒數第k個節點在鍊錶中部、頭部、尾部;
特殊輸入:鍊錶是null,鍊錶節點個數小於k;k=0;
分析:
1. 維護兩個指標,前面的指標走k-1步後,後面的指標再走,直到前面的指標到達最後乙個節點,此時前面的指標所指節點就是倒數第k個節點;前後指標永遠相差k-1步的距離;
2. 對特殊輸入的處理很關鍵;
3. 當用乙個指標遍歷鍊錶不能解決問題時,用兩個指標;其中乙個指標走的慢,乙個指標走得快;
面試題23:鍊錶中環的入口節點
如果乙個鍊錶中包含環,如何找出環的入口節點;
測試用例:
功能測試:倒數第k個節點在鍊錶中部、頭部、尾部;
特殊輸入:鍊錶是null,鍊錶節點個數小於k;k=0;
分析:
1. 如何確定乙個鍊錶中包含環:兩個指標,一快一慢,如果快指標追上慢指標,則找到環,返回追上的節點,追上的節點在環內,但不一定是環入口;
2. 如何確定環的節點數:維護乙個指標從追上的節點開始,邊移動邊計數,再次回到這個節點時,就得到環的節點數n;
3. 如何找到環的入口:得到環的節點數n,維護兩個指標,乙個指標先移動n步,兩指標再一起移動,當兩指標重合時,重合節點是入口節點(先走的指標多走的n步即是多走了環的一圈)
《劍指offer》筆記 第三章 4
面試題24 翻轉鍊錶 定義乙個函式,輸入乙個鍊錶的頭節點,翻轉該鍊錶並輸出翻轉後的頭節點。struct listnode 測試用例 功能測試 輸入的鍊錶含多個節點 乙個節點 特殊輸入 鍊錶是null 分析 2.翻轉後的頭指標要指向翻轉前的尾節點 翻轉後的尾節點的要指向null 面試題25 合併兩個排...
劍指 Offer 第三章總結與實現
給定乙個 double 型別的浮點數 base 和 int 型別的整數 exponent。求 base 的 exponent 次方。不可使用庫函式,不用考慮大數問題。考察 的完整性,不能覺得它簡單,要盡可能想的全面。base 是 0,或者 exponent 是0 exponent 是乙個負值 快速冪...
第三章筆記
第三章預習筆記 一 高階語言和機器指令中的運算 1,按位運算 符號 按位or運算 符號 按位and運算 符號 表示按位not運算 符號 按位xor運算。實現掩碼操作 通過與給定的乙個位模式進行按位與,可以提取所需要的位,對這些位進行 置1 清0 等。2,符號 按位or運算 符號 表示and運算 符號...