青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
(說明:這些題就不是什么花樣了,考的是你的基礎知識怎么樣。再聰明而沒有實學的人都將會被這些題所淘汰。) 
1.鏈表和數組的區別在哪里?

ANSWER 主要在基本概念上的理解。但是最好能考慮的全面一點,現在公司招人的競爭可能就在細節上產生,誰比較仔細,誰獲勝的機會就大。

1)數組在內存中是逐個存放的,也就是說倘若數組的第一個元素在地址A,則數組第二個元素就在地址A+1。而鏈表則不是,鏈表每個節點沒有相對固定的位置關系。某個節點在地址A其后的節點不一定是A+1,而在內存的其他空閑區域,呈現一種隨機的狀態。

2)數組一旦顯式的被申明后,其大小就固定了,不能動態進行擴充。而鏈表則可以,可以動態生成節點并且添加到已有的鏈表后面。

3) …… (大家一起想想)

 

2.編寫實現鏈表排序的一種算法。說明為什么你會選擇用這樣的方法?

ANSWER 鏈表通常是插入排序,為什么呢?在數組中插入排序實現時會大量的移動數據從而刪除位置不正確的元素,這是順序表刪除操作的低效性。從數學的角度,順序表 (即數組)的刪除操作是O(n).鏈表就不同,由于其存儲位置的不固定性,其刪除固定位置的元素只需要O(1)的時間,所以整體性能上獲得比較大的提高。

 

3.編寫實現數組排序的一種算法。說明為什么你會選擇用這樣的方法?

ANSWER 排序算法非常成熟了,實際上排序是研究算法的很有效例子。回答的時候盡量找一些比較有技術性的算法,比如堆排序或者快速排序,如果寫冒泡什么的,別人都會 寫,也就顯示不出你的優秀了。當然一定要注意給定的條件。不至于三個數讓你排序,你搞個快排,這就有點“宰牛刀殺雞”了。

 

4.請編寫能直接實現strstr()函數功能的代碼。

ANSWER 首先要知道strstr()這個函數是干什么的,自己去查查C語言的書,一般附錄后面會給出C語言標準庫的。這個題目實際上也是一類重要的算法門類,叫做 “字符串的模式匹配”。它有很多的現成算法,其中最簡單的要數樸素的匹配算法,還有KMP,BM這些高級算法,筆試估計是來不及寫的。下面給出樸素的匹配 算法。

int stringMatching(char* pattern,char* text)

{

         int pLen = strlen(pattern),tLen = strlen(text);

         for(int i = 0;i <= tLen - pLen;i++){

      for(int j = 0; pattern[j] == text[i + j];j++);

                   if(j == pLen) return i;

         }

         return -1; // Not found

}

 

 

5.編寫反轉字符串的程序,要求優化速度、優化空間。

ANSWER:循環當然是最簡單的。

void reverseString(char* str)

{

         int n = strlen(str);

         for(int i = 0;i < n/2;i++)

         {int t = str[i];str[i] = str[n - i - 1];str[n - i - 1] = t;}

}

 

6.在鏈表里如何發現循環鏈接?

ANSWER: 顯然只需要判斷是否存在回溯指針就行了。判斷,是否存在某個節點的后繼指向其前面位置的指針。具體實現的時候可以模仿DFS中的訪問標志數組的方法,我們可以在struct node中設計該節點的一個訪問標志位,設為visited 。每訪問一個節點就將其visited域置為1。這樣的話,一次遍歷下來,如果發現某個后續節點的visited域已經是1,那么就可以判定其存在循環鏈接。具體的代碼就不寫了,太簡單了。

bool findloop(node *head)

 { node *pf=head;

   node *ps=head->next;

   while(pf!=NULL&&ps!=NULL&&pf->next!=NULL&&ps->next!=NULL)

   { pf=pf->next;

     ps=ps->next->next;

     if(pf==ps)return true;

   }

return false;

 }


7.寫一個函數,檢查字符是否是整數,如果是,返回其整數值。(或者:怎樣只用4行代碼編寫出一個從字符串到長整形的函數?)

分析 :簡單!掃描一遍,每次生成對應整數的最高位。一行也就搞定了!

long convert(char* s_string,long s_integer)

{

for(int sLen = strlen(s_string), i = 0; i < sLen;s_integer += (s_string[i++] - '0')*pow(10,sLen - i - 1));

         return s_integer;

}

 

8.給出一個函數來輸出一個字符串的所有排列。

ANSWER 簡單的回溯就可以實現了。當然排列的產生也有很多種算法,去看看組合數學,還有逆序生成排列和一些不需要遞歸生成排列的方法。印象中Knuth的< TAOCP>第一卷里面深入講了排列的生成。這些算法的理解需要一定的數學功底,也需要一定的靈感,有興趣最好看看。

void permStr(char* str,int i)

{

         if(i == strlen(str) - 1)

           printf("%s\n",str);

         else

         {

            for(int j = i;j < strlen(str);j++)

            {

                      swap(&str[i],&str[j]);

                      permStr(str,i + 1);

                      swap(&str[i],&str[j]);

            }

         }

}

 

9.給出一個函數來復制兩個字符串A和B。字符串A的后幾個字節和字符串B的前幾個字節重疊。

anSwer  記住,這種題目往往就是考你對邊界的考慮情況。編程除了技術上的熟練以外,細心也是非常重要的。其實很多編程的大師可能并不是有特別的技術,往往就是他們 非常的耐心和細心,記住:編程是計算機科學中最基本的工作,它是最容易去掌握的,耐心點,細心點你一定能夠學好它。代碼看下面:

char* myStrcpy(char* s,char* a,char* b,char n)

{

int aLen = strlen(a),bLen = strlen(b);

         if(n > aLen || n > bLen)

                   return NULL; // Error

         for(int i = 0;i < aLen + bLen - n;i++)

                   if(i < aLen - n) s[i] = a[i];

                   else s[i] = b[i - aLen + n];

                   s[i] = '\0';

                   return s;

}

 

10.怎樣編寫一個程序,把一個有序整數數組放到二叉樹中?

ANSWER :二叉搜索樹的建樹方法。簡單的遞歸結構。實在不理解,干脆記下來好了。關于樹的算法設計一定要聯想到遞歸,因為樹本身就是遞歸的定義。這里的遞歸應該是 理所當然的吧,不過,學會把遞歸改稱非遞歸也是一種必要的技術。畢竟,遞歸會造成棧溢出,關于系統底層的程序中不到非不得以最好不要用。但是對某些數學問 題,就一定要學會用遞歸去解決。

void insertNode(bTree** root,int val)

{

    bTree* newNode = (bTree* ) malloc(sizeof(bTree));

         newNode->data = val;

        newNode->lChild = NULL;

        newNode->rChild = NULL;

      if(!(*root))

            *root = newNode;

    else if(newNode->data < (*root)->data)

          insertNode(&(*root)->lChild,val);

         else

          insertNode(&(*root)->rChild,val);  

}

 

11.怎樣從頂部開始逐層打印二叉樹結點數據?請編程。

ANSWER 二叉樹的層次遍歷沒什么好說的,如果你不會還是早點把基礎復習一下。一個勁的往后學,才會發現原來最最重要的還是以前最基礎最簡單的。

typedef struct myBinaryTree

{

         int data;

         struct myBinaryTree* lChild;

         struct myBinaryTree* rChild;

} bTree;

 

struct myQueen

{

         bTree* que[QSIZE];

         int front;

         int rear;

} binQueue; // Global var

 

void initQueue()

{

         // front == real makes the queue empty

         binQueue.rear = QSIZE - 1;

         binQueue.front = binQueue.rear;

         for(int i = 0;i < QSIZE;i++)

           binQueue.que[i] = NULL;

}

 

int enQueue(bTree* newNode)

{

         if(binQueue.front >= 1)

         binQueue.que[binQueue.front--] = newNode;

        

         else return 0;

         return 1;

}

 

bTree* deQueue()

{

         int t;

      if(binQueue.front != binQueue.rear){

         t = binQueue.rear;

         binQueue.rear--;

    return binQueue.que[t];

         }

         else return NULL;

}

int levelTraversal(bTree** root)

{

         initQueue();

         bTree* lc = (bTree* ) malloc(sizeof(bTree));

         bTree* rc = (bTree* ) malloc(sizeof(bTree));

         bTree* p = (bTree* ) malloc(sizeof(bTree));

         if((!lc) || (!rc) || (!p)){

         printf("OVERFLOW\n");

         exit(OVERFLOW); // Allocation Error

         }

         p = *root;

         if(!p) {

                   printf("Empty Tree,build it first !\n");

             return 0;

         }

         enQueue(p); // enqueue the root of the tree

      while (binQueue.front != binQueue.rear){

       p = deQueue();

            printf("%d ",p->data);

            lc = p->lChild;

            rc = p->rChild;

            if(lc != NULL)

                      enQueue(lc);

          if(rc != NULL)

                      enQueue(rc);

         }

         printf("\n");

         return 1;

}

 

12.怎樣把一個鏈表掉個順序(也就是反序,注意鏈表的邊界條件并考慮空鏈表)?

ANSWER 前面說了,最基本的是最重要的。線性數據結構是學習數據結構的入門,一定要掌握好。微軟的題目還是跟國內的公司不一樣。國內的一上來就是些概念,跟考歷史一樣。

typedef struct listNode

{

         struct listNode* link;

         int data;

}node;

 

node* getNode(node* newNode,int val)

{

    if(!newNode)

                   exit(OVERFLOW);

         newNode->link = NULL;

         newNode->data = val;

         return newNode;

}

/*

  Insert a new node after p

*/

int insertNode(node* prev,node* newNode)

{

         if(!prev) return 0;

         newNode->link = prev->link;

         prev->link = newNode;

    return 1;

}

/*

 delete the node after the node prev

*/

int eraseNode(node*prev,node* p)

{

         if(p == NULL)

                   return 0;

         prev->link = p->link;

         free(p);

         return 1;

}

void buildList(node* head)

{

         int value;

         node* newNode = (node* ) malloc(sizeof(node));

         node* p = head;

         scanf("%d",&value);

         while(value != -1){

         newNode = getNode(newNode,value);

         insertNode(p,newNode);

         p = p->link;

         newNode = (node* ) malloc(sizeof(node));

         scanf("%d",&value);

         }

}

 

int reverseList(node* head)

{

         node* p = head->link;

         node* q = p->link;

         if(p == NULL){

         printf("The list is empty!\n");

         return 0;

         }

         while(q != NULL){

    node* newNode = (node* ) malloc(sizeof(node));

         newNode = getNode(newNode,q->data);

         insertNode(head,newNode);

         eraseNode(p,q);

         q = (node* ) malloc(sizeof(node)); // Allocate again

         q = p->link;

         }

         p->link = NULL;

      return 1;

}

http://blog.chinaunix.net/u2/76292/showart_1388527.html

posted on 2009-12-06 23:31 chatler 閱讀(802) 評論(1)  編輯 收藏 引用 所屬分類: Algorithm

FeedBack:
# re: 微軟面試中簡單的算法題目(轉)
2009-12-06 23:33 | chatler
1.燒一根不均勻的繩子,從頭燒到尾總共需要 1 個小時,問如何用燒繩子
的方法來確定半小時的時間呢?
2.10 個海盜搶到了100 顆寶石,每一顆都一樣大小且價值連城。他們決定
這么分:
(1)抽簽決定自己的號碼(1~10);
(2)首先,由1 號提出分配方案,然后大家表決,當且僅當超過半數的人
同意時,按照他的方案進行分配,否則將被扔進大海喂鯊魚;
(3)如果1 號死后,再由2 號提出分配方案,然后剩下的4 個人進行表決,
當且僅當超過半數的人同意時,按照他的方案進行分配,否則將被扔入大海喂鯊
魚;
(4)依此類推??
條件:每個海盜都是很聰明的人,都能很理智地做出判斷,從而做出選擇。
問題:第一個海盜提出怎樣的分配方案才能使自己的收益最大化?
3.為什么下水道的蓋子是圓的?
4.中國有多少輛汽車?
5.你讓工人為你工作7 天,回報是一根金條,這根金條平分成相連的7 段,
你必須在每天結束的時候給他們一段金條。如果只允許你兩次把金條弄斷,你如
何給你的工人付費?
6.有一輛火車以每小時15 公里的速度離開北京直奔廣州,同時另一輛火車
以每小時20 公里的速度從廣州開往北京。如果有一只鳥,以30 公里每小時的速
度和兩輛火車同時啟動,從北京出發,碰到另一輛車后就向相反的方向返回去飛,
就這樣依次在兩輛火車之間來回地飛,直到兩輛火車相遇。請問,這只鳥共飛行
了多長的距離?
7.你有兩個罐子以及50 個紅色彈球和50 個藍色彈球,隨機選出一個罐子,
隨機選出一個彈球放入罐子,怎樣給出紅色彈球最大的選中機會?在你的計劃
里,得到紅球的幾率是多少?
8.想像你站在鏡子前,請問,為什么鏡子中的影像可以左右顛倒,卻不能
上下顛倒呢?
9.如果你有無窮多的水,一個3 公升的提捅,一個5 公升的提捅,兩只提
捅形狀上下都不均勻,問你如何才能準確稱出4 公升的水?
10.你有一桶果凍,其中有黃色、綠色、紅色三種,閉上眼睛抓取同種顏色
的兩個。抓取多少次就可以確定你肯定有兩個同一顏色的果凍?
11.連續整數之和為1000 的共有幾組?
12.從同一地點出發的相同型號的飛機,可是每架飛機裝滿油只能繞地球飛
半周,飛機之間可以加油,加完油的飛機必須回到起點。問至少要多少架次,才
能滿足有一架繞地球一周。
參考答案:
1.兩邊一起燒。
2.96,0,1,0,1,0,1,0,1,0。
3.因為口是圓的。
4.很多。
5.分1,2,4。
6.6/7 北京到廣州的距離。
7.100%。
8.平面鏡成像原理(或者是“眼睛是左右長的”)。
9.3 先裝滿,倒在5 里,再把3 裝滿,倒進5 里。把5 里的水倒掉,把3 里
剩下的水倒進5 里,再把3 裝滿,倒進5 里,ok!
10.一次。
11.首先1000 為一個解。連續數的平均值設為x,1000 必須是x 的整數倍。
假如連續數的個數為偶數個,x 就不是整數了。x 的2 倍只能是5,25,125 才行。
因為平均值為12.5,要連續80 個達不到。125/2=62.5 是可以的。即62,63,61,
64,等等。連續數的個數為奇數時,平均值為整數。1000 為平均值的奇數倍。
1000=2×2×2×5×5×5;x 可以為2,4,8,40,200 排除后剩下40 和200 是
可以的。所以答案為平均值為62.5,40,200,1000 的4 組整數。
12.答案是5 架次。一般的解法可以分為如下兩個部分:
(1)直線飛行
一架飛機載滿油飛行距離為1,n 架飛機最遠能飛多遠?在不是兜圈沒有迎
頭接應的情況,這問題就是n 架飛機能飛多遠?存在的極值問題是不要重復飛
行,比如兩架飛機同時給一架飛機加油且同時飛回來即可認為是重復,或者換句
話說,離出發點越遠,在飛的飛機就越少,這個極值條件是顯然的,因為n 架飛
機帶的油是一定的,如重復,則浪費的油就越多。比如最后肯定是只有一架飛機
全程飛行,注意“全程”這兩個字,也就是不要重復的極值條件。如果是兩架飛
機的話,肯定是一架給另一架加滿油,并使剩下的油剛好能回去,就說第二架飛
機帶的油耗在3 倍于從出發到加油的路程上,有三架飛機第三架帶的油耗在5
倍于從出發到其加油的路程上,所以n 架飛機最遠能飛行的距離為s=1+1/3+?
+1/(2n+1)這個級數是發散的,所以理論上只要飛機足夠多最終可以使一架飛
機飛到無窮遠,當然實際上不可能一架飛機在飛行1/(2n+1)時間內同時給n?1
個飛機加油。
(2)可以迎頭接應加油
一架飛機載滿油飛行距離為1/2,最少幾架飛機能飛行距離1?也是根據不
要重復飛行的極值條件,得出最遠處肯定是只有一架飛機飛行,這樣得出由1/2
處對稱兩邊1/4 肯定是一架飛機飛行,用上面的公式即可知道一邊至少需要兩架
飛機支持,(1/3+1/5)/2>1/4(左邊除以2 是一架飛機飛行距離為1/2),但
是有一點點剩余,所以想像為一個滑輪(中間一個飛機是個繩子,兩邊兩架飛機
是個棒)的話,可以滑動一點距離,就說加油地點可以在一定距離內變動(很容
易算出來每架飛機的加油地點和加油數量,等等)  回復  更多評論
  
<2011年5月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品系列在线| 美女精品在线观看| 国精品一区二区| 国产精品网站在线| 国产精品分类| 欧美日韩免费看| 欧美亚洲第一区| 国产精品实拍| 国产视频欧美视频| 亚洲成色最大综合在线| 日韩一级黄色大片| 亚洲主播在线播放| 久久伊人免费视频| 亚洲精品永久免费| 久久xxxx| 免费毛片一区二区三区久久久| 欧美成人一品| 国产噜噜噜噜噜久久久久久久久 | 伊人久久男人天堂| 亚洲人久久久| 亚洲女人av| 免费亚洲网站| aa国产精品| 久久蜜桃av一区精品变态类天堂| 欧美精品在线观看91| 国产日韩亚洲| 99伊人成综合| 免费在线观看日韩欧美| 99在线|亚洲一区二区| 久久精品二区三区| 黄色另类av| 国产在线高清精品| 亚洲国产精品一区二区尤物区| 亚洲欧洲中文日韩久久av乱码| 亚洲图片激情小说| 免费日本视频一区| 一区二区三区三区在线| 欧美77777| 狠狠色噜噜狠狠狠狠色吗综合| 99精品久久久| 免费永久网站黄欧美| 亚洲在线一区二区三区| 欧美另类高清视频在线| 尤物九九久久国产精品的分类| 欧美一区不卡| 亚洲无限av看| 欧美视频一区| 一区二区三区久久网| 欧美96在线丨欧| 亚洲欧美国产日韩天堂区| 欧美日韩精品国产| 日韩视频免费在线| 亚洲国产第一页| 欧美一区二区三区视频在线 | 国模大胆一区二区三区| 亚洲免费视频在线观看| 亚洲乱码一区二区| 欧美精品三级日韩久久| 日韩亚洲精品电影| 亚洲福利视频网站| 蜜臀91精品一区二区三区| 亚洲第一区中文99精品| 欧美成人资源| 欧美精品一区二区高清在线观看| 亚洲精品少妇| 亚洲精品乱码久久久久久久久 | 乱码第一页成人| 在线成人激情黄色| 欧美成人精品福利| 女同性一区二区三区人了人一| 亚洲国产精品黑人久久久| 欧美成人一区在线| 欧美激情中文字幕乱码免费| 在线观看日韩www视频免费| 日韩一区二区精品| 欧美成人精品福利| 欧美国产日韩免费| 中国女人久久久| 亚洲视频一区二区免费在线观看| 国产精品午夜久久| 牛牛精品成人免费视频| 免费成人黄色片| 一区二区激情视频| 欧美在线视频免费观看| 一区二区高清| 亚洲天堂男人| 国产一区二区三区高清在线观看| 嫩模写真一区二区三区三州| 欧美成年人网站| 亚洲一二三级电影| 欧美一区二区在线免费观看| 亚洲国产日韩一级| 夜夜嗨av色综合久久久综合网| 国产无遮挡一区二区三区毛片日本| 狂野欧美性猛交xxxx巴西| 欧美高潮视频| 久久xxxx| 欧美高清不卡| 亚洲免费观看高清完整版在线观看熊 | 国内精品福利| 亚洲人体1000| 国产婷婷色一区二区三区| 亚洲第一二三四五区| 国产精品视频yy9099| 欧美激情亚洲自拍| 国产日韩精品在线播放| 亚洲电影在线观看| 国产日韩一区二区三区在线| 亚洲国产欧美不卡在线观看| 国产精品你懂的在线欣赏| 免费在线看一区| 国产精品免费一区二区三区在线观看| 另类av导航| 国产精品视频区| 亚洲人成网站影音先锋播放| 国产视频一区在线| 亚洲最黄网站| 亚洲美女毛片| 免费成年人欧美视频| 麻豆精品网站| 国产精品羞羞答答xxdd| 亚洲精品字幕| 在线欧美日韩国产| 午夜精品久久99蜜桃的功能介绍| 日韩午夜av| 欧美激情va永久在线播放| 久久久久久999| 欧美日韩国产欧| 欧美激情在线狂野欧美精品| 亚洲大胆女人| 久久久99精品免费观看不卡| 午夜在线视频一区二区区别 | 国产亚洲激情| 亚洲一级免费视频| 亚洲一级黄色av| 欧美日韩在线播放一区二区| 亚洲国产精品va在线看黑人动漫| 一区二区在线视频观看| 亚洲欧美日韩在线高清直播| 亚洲国产成人在线| 久久亚洲午夜电影| 另类综合日韩欧美亚洲| 欧美在线亚洲一区| 国产精品99一区| 中文精品一区二区三区| av成人福利| 欧美激情五月| 亚洲精品日韩在线观看| 亚洲福利国产| 美国成人毛片| 亚洲免费观看在线观看| 亚洲影院污污.| 国产精品日韩高清| 篠田优中文在线播放第一区| 久久精品国产久精国产爱| 国产精品一区一区三区| 亚洲欧美日韩精品久久| 久久福利一区| 揄拍成人国产精品视频| 欧美大片在线观看| 亚洲欧洲中文日韩久久av乱码| 一本大道av伊人久久综合| 欧美日韩国产美女| 欧美一区二区三区免费大片| 男人的天堂成人在线| 日韩视频在线观看国产| 国产精品裸体一区二区三区| 午夜精品久久久久| 欧美成人免费全部| 亚洲精品在线视频观看| 国产精品婷婷| 老司机午夜免费精品视频 | 久久精品国产综合| 伊人久久久大香线蕉综合直播| 欧美va天堂| 亚洲欧美日韩在线| 欧美1区3d| 亚洲在线观看视频| 国产一区免费视频| 欧美日韩亚洲综合在线| 亚洲一区二区伦理| 欧美aⅴ99久久黑人专区| 亚洲成色www8888| 亚洲一区中文| 久久在线精品| 午夜在线电影亚洲一区| 亚洲国产成人av| 国产日产欧美一区| 欧美精品97| 性欧美大战久久久久久久免费观看| 亚洲精品欧美一区二区三区| 欧美淫片网站| 亚洲特色特黄| 亚洲国产另类 国产精品国产免费| 国产精品一区二区久久精品| 美日韩精品免费| 久久久水蜜桃av免费网站| 中文欧美字幕免费| 亚洲精品中文字幕女同| 亚洲激情啪啪|