題目:遞迴函式mystrlen(char *buf, int n)是用來實現統計字串中第乙個空字元前面字元長度。
舉例來說:
char
str = ;
字串buf, 當輸入n=10或者20, 期待輸出結果是6; 當輸入n=3或5, 期待輸出結果是3或5。
直接迴圈遍歷,使用乙個變數記錄遍歷過的字元個數,直到遇到空字元為止。
時間複雜度為o(n)。
遞迴思路,我們首先要進行分治。
最簡單的分治就是二分法,前後進行劃分。
比較前半部分空字串前邊的字元長度,
如果這個長度小於n/2,則直接返回這個結果
如果這個長度不小於n/2(等於),則累計當前的長度+後半部分的空字串前邊的長度。
同時需要找到遞迴的終止條件。
終止條件是首字母開頭是』\0』字元,n是0的情況和n是1的情況。
int my_strlen(char* buf, int n) //此處n為輸入長度,不是字串實際長度
else
if (n == 1)
//折半查詢,此處取得的t代表n/2中是否有字串的實際長度,
//如果字串的實際長度是大於等於n/2的則需要繼續遞迴,如果小於n/2則可直接返回
if (t < n / 2)
else
}
程式設計師面試寶典一
1 int i i 首先宣告乙個變數i,然後將變數i的值 未初始化 賦值給自己 2 下面 的意義 void func int x,int count 求乙個整數轉換為二進位制之後包含多少個1 3 printf在vc6.0下是自右向左運算的 好像跟編譯器有關 int arr int ptr arr p...
《程式設計師面試寶典》中的乙個錯誤
發現寶典中乙個錯誤,題目如下 判斷下面函式的輸出 1 void main 2解答 輸出的結果是000000f7,fffffff7。變數i的輸出是沒有疑問的,unsigned int到unsigned char直接截斷,取低位元組。對於變數b,在第5行中,書中解釋是這一行等價於 unsigned in...
程式設計師面試寶典 實現乙個集合棧
解析 剛開始沒有反應過來題目是什麼意思,仔細讀了讀才梳理出來 輸入的引數中ope是乙個二維vector陣列,其中第二維度 也就是列 被限制為只有兩個元素。例如ope 2 0 和ope 2 1 當ope 2 0 1時,表示要入棧,ope 2 1 的值就是要插入的值。當ope2 0 2時,表示要出棧,此...