C 面試演算法題C 實現

2021-08-14 15:45:57 字數 3658 閱讀 5599

題目一(陣列中查詢)

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

class solution 

}else

}else

return

false;

}return

false;

}};

class

solution

int len =originallength+2*countofblanks;

if(len+1>length)

return ;

char*pstr1=str+originallength;//複製結束符『\0』

char*pstr2=str+len;

while(pstr1if(*pstr1==' ')

else

--pstr1;}}

};

題目三(列印鍊錶)

輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。

/**

* struct listnode

* };

*/class solution

int len=arr.size();

for(int i=0;ireturn result;

}};

題目四(重建二叉樹)

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

/**

* definition for binary tree

* struct treenode

* };

*/class solution

}//對於中序遍歷,根節點左邊的節點位於二叉樹的左邊,根節點右邊的節點位於二叉樹的右邊

//利用上述這點,對二叉樹節點進行歸併

for(int i=0;i1]);//前序第乙個為根節點

}for(int i=gen+1;i//和shell排序的思想類似,取出前序和中序遍歷根節點左邊和右邊的子樹

//遞迴,再對其進行上述所有步驟,即再區分子樹的左、右子子數,直到葉節點

head->left=reconstructbinarytree(left_pre,left_in);

head->right=reconstructbinarytree(right_pre,right_in);

return head;

}};

題目五(用兩個棧實現佇列)

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

class solution

int pop()

stack2[i] = -1;

return stack1[i];

}private:

vector

stack1;//存數

vector

stack2;//位址

};

題目六(旋轉陣列的最小數字)

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。

#include 

#include

#include

#include

#include

using

namespace

std;

class solution //if

int left = 0,right = size - 1;

int mid = 0;

// rotatearray[left] >= rotatearray[right] 確保旋轉

while(rotatearray[left] >= rotatearray[right])//if

mid = left + (right - left) / 2;

// rotatearray[left] rotatearray[right] rotatearray[mid]三者相等

// 無法確定中間元素是屬於前面還是後面的遞增子陣列

// 只能順序查詢

if(rotatearray[left] == rotatearray[right] && rotatearray[left] == rotatearray[mid])//if

// 中間元素位於前面的遞增子陣列

// 此時最小元素位於中間元素的後面

if(rotatearray[mid] >= rotatearray[left])//if

// 中間元素位於後面的遞增子陣列

// 此時最小元素位於中間元素的前面

else//else

}//while

return rotatearray[mid];

}private:

// 順序尋找最小值

int minorder(vector

&num,int left,int right)//if

}//for

return result;

}};int main();

//vectornum = ;

vector

num = ;

int result = s.minnumberinrotatearray(num);

// 輸出

cout

0;}

題目七(斐波那契數列)

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。

n<=39

class solution 

if(n == 1)

int a = 0,b = 1;

int m = 0;

int i;

for(i = 2;i <= n;i++)

return m;

}};

題目八(跳台階)

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

class solution 

return f;

}};

題目九(**跳台階)

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

class solution 

};

題目十(矩形覆蓋)

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

class solution 

int f1 = 1;

int f2 = 2;

int f3;

for (int i = 3; i <= number; i++)

return f3;

}};

C語言面試演算法題(二)

1.寫乙個函式,它的原形是int continumax char outputstr,char intputstr 功能 在字串中找出連續最長的數字串,並把這個串的長度返回,並把這個最長數字串付給其中乙個函式引數outputstr所指記憶體。例如 abcd12345ed125ss123456789 ...

面試演算法題

前幾天,一好友去筆試,有一題 現在有1000個蘋果,和10個箱子,如何把這1000個蘋果裝在這10個箱子裡,才能使不管任何數量 1 1000 的蘋果,都能一次給出?當時,我們都想,出題這人。今天,在想移位的時候,突然想到了,這絕對是二進位制數的變種。分析 1000個蘋果,最接近1024,轉化為2進製...

面試演算法題

1 直方圖矩形最大值 class solution s.push i return res 2 第n個醜數 class solution return res.back 3 lru cache 最近最少使用頁面置換快取器 class lrucache int get int key void set...