C 筆試面試(演算法題集一)

2021-06-23 02:01:06 字數 2254 閱讀 6316

1>你讓一些人為你工作了七天,你要用一根金條作為報酬。金條被分成七小塊,每天給出一小塊。如果你只能將金條分割兩次,你怎樣分給這些工人?

解答:將金條分割成1+2+4.這樣這三個數字將可以組成1-7的任何數字。

2->用一種演算法來顛倒乙個鍊錶的順序。

解答:遞迴的解法:

node *reverse(node *head)

if(head==null) return head;

if(head->next==null) return head;

node *p=reverse(head->next);

head->next->next=head;

head->next=null;

return p;

非遞迴演算法:

node *reversenonrecurisve(node *head)

if(head==null)  return head;

node *p=head;

node* pre=null;

while(p->next!=null)

node *pnext=p->next;

p->next=pre;

pre=p;

p=pnext;

p->next=pre;

return p;

3>演算法通用字串匹配

解法:int match(char *str,char *ptn)

if(*ptn=='\0') return 1;

if(*ptn=='*')

dowhile(*str!='\0');

if(*str=='\0')  return 0;

if(*str==*ptn || *ptn=='?')

return match(str+1,ptn+1);

return 0;

4>比較兩個字串,用o(n)時間和恒量空間

解答:int strcmp(char *p1,char *p2)

while(*p1!='\0' && *p2!='\0' &&*p1==*p2)

p1++;

p2++;

if(*p1=='\0' &&*p2=='\0')    return 0;

if(*p1=='\0')  return -1;

if(*p2=='\0')  return 1;

return (*p1-*p2);

5>不用乘法或者加法增加8倍。用類似的方法增加7倍。

解答:n<<3       (n<<3)-n

6>判斷整數序列是不是二叉樹的後序遍歷結果。

輸入乙個整數陣列,判斷該陣列是不是某二元查詢樹的後序遍歷結果。

解答:void ispostorderresult(int a,int left,int right,bool &flag)

if(flag &&leftint i=left;

while(a[right]>a[i])  i++;

for(int j=i;jif(a[j]isposterresult(a,left,i-1,flag);

isposterresult(a,i+1,right,flag);

7>求二叉樹中節點的最大距離(距離定義為兩個節點之間邊的個數)

解答:int maxdistance(node *root){

int depth;

return helper(root,depth);

int helper(node* root,int &depth)

if(root==null){

depth=0; return 0;

int l,r;

int maxleft=helper(root->left,l);

int maxright=helper(root->right,r);

depth=max(l,r)+1;

return max(maxleft,max(right,l+r)); 

8>在乙個字串中找到第乙個只出現一次的字元。例如輸入abaccdeff,則輸出b。

解答:char firstsingle(char *str)

int c[255];  memset(c,0,sizeof(c));

char *p=str;

while(*p!='\0')

c[*p]++;

p++;

p=str;

while(*p!='\0'){

if(c[*p]==1)    return *p;

return '\0';

面試演算法題

前幾天,一好友去筆試,有一題 現在有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...

面試演算法題總結 一

華為面試題 寫乙個程式,要求功能 求出用1 2 5 這三個數不同個數組合的和為100 的組合個數。如 100 個1 是乙個組合,5 個1 加19 個5 是乙個組合。請用c 語言寫。答案 最容易想到的演算法是 設x 是1 的個數,y 是2 的個數,z 是5 的個數,number 是組合數 注意到0 x...