題目:輸入乙個整數陣列,調整陣列中數字的順序,使得所有奇數字於陣列的前半部分,所有偶數字於陣列的後半部分。要求時間複雜度為o(n)。
思路:維護兩個索引 low 和 high, low初始化為指向陣列中第乙個元素,只能向後遞增;high指向陣列最後乙個元素,只能向前遞減。
若low指向的數為偶數,high指向的數為奇數,則交換low和high 所指的值。迴圈條件為low=high,則退出,程式結束。
如此,則陣列中前半部分為奇數,後半部分為偶數。
#includeusing namespace std;
//判定給定數num是否為奇數
inline bool isodd(int num)
//交換陣列中位於low和high的數
inline void swap(int *array, size_t low, size_t high)
//重新排列陣列中的奇偶數,使奇數在前,偶數在後
void reorder(int *array, size_t length, bool (*func)(int))
} }void print(int *array, size_t length)
{ for(int i=0; i
程式設計師面試題精選
問題描述 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c所能排列出來的所有字串abc acb bac bca cab和cba。問題分析 這是一道很好的考查對遞迴理解的程式設計題。寫遞迴程式關鍵有兩點,處理好進入與返回的關係,進入時改變了什麼,返回時應當恢復。字...
程式設計師面試題精選100題
今天開始各種刷面試題,沉下心來集中時間,全身心投入 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。比如將二元查詢樹 10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。相關概念 二元查詢樹 它首先要是...
程式設計師面試題精選 翻轉句子中單詞的順序
題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i 分析 由於編寫字串相關 能夠反映程式設計師的程式設計能力和程式設計習慣,與字串相關的問題...