《劍指offer》筆記 第三章 3

2021-08-03 15:56:45 字數 1554 閱讀 4966

面試題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運算 符號...