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...