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

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),但
是有一點點剩余,所以想像為一個滑輪(中間一個飛機是個繩子,兩邊兩架飛機
是個棒)的話,可以滑動一點距離,就說加油地點可以在一定距離內變動(很容
易算出來每架飛機的加油地點和加油數量,等等)  回復  更多評論
  
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(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>
            亚洲精品国产品国语在线app | 欧美成人免费网| 亚洲另类在线视频| 国内伊人久久久久久网站视频| 欧美激情1区2区3区| 久久本道综合色狠狠五月| 亚洲一区成人| 欧美激情一区二区| 国内精品伊人久久久久av影院 | 国产毛片一区| 欧美成人精品不卡视频在线观看| 99国产麻豆精品| 久久久综合香蕉尹人综合网| 日韩视频在线免费观看| 亚洲无亚洲人成网站77777| 亚洲在线观看视频| 亚洲欧美卡通另类91av| 午夜精品福利视频| 欧美**字幕| 亚洲美女电影在线| 欧美一区二区在线看| 六月婷婷一区| 亚洲综合激情| 欧美精品一区二区久久婷婷| 亚洲欧美一区二区激情| 久久综合伊人77777麻豆| 可以免费看不卡的av网站| 久久精品欧美日韩| 国产精品视频免费一区| 欧美另类69精品久久久久9999| 性欧美xxxx大乳国产app| 日韩视频中文字幕| 久久久精品午夜少妇| 亚洲一区影院| 欧美一区二区日韩一区二区| 香蕉久久一区二区不卡无毒影院| 夜久久久久久| 亚洲午夜精品久久| 亚洲国产中文字幕在线观看| 久久精品国产欧美亚洲人人爽| 国产偷久久久精品专区| 在线观看成人av电影| 午夜精品理论片| 一区二区三区欧美| 亚洲精品一区二区在线| 久久人人爽爽爽人久久久| 国产美女一区| 麻豆精品视频在线| 欧美劲爆第一页| 一区二区三区四区国产| 亚洲精品美女久久7777777| 女人香蕉久久**毛片精品| 亚洲日韩视频| 亚洲天堂av综合网| 亚洲成人在线视频播放| 亚洲国产91精品在线观看| 欧美国产先锋| 久久精品国产亚洲a| 葵司免费一区二区三区四区五区| 欧美精品1区2区3区| 亚洲最快最全在线视频| 欧美一区在线视频| 一区二区三区免费网站| 欧美在线观看网址综合| 亚洲二区视频| 夜夜嗨网站十八久久| 国产精品一级在线| 欧美激情精品久久久| 国产视频一区二区三区在线观看| 亚洲国产欧美日韩精品| 亚洲午夜91| 久久婷婷久久| 国产视频在线观看一区二区| 美女黄色成人网| 国内精品久久国产| 一本不卡影院| 在线日本欧美| 香蕉久久夜色精品国产| 欧美激情精品久久久久久大尺度| 国产日韩欧美精品综合| 久久日韩粉嫩一区二区三区| 国产精品久线观看视频| 一区二区三区不卡视频在线观看| 欧美人成在线| 欧美成人精品一区二区| 国产一区二区三区无遮挡| 性伦欧美刺激片在线观看| 午夜精品国产更新| 欧美在线视频a| 久久久久国产精品一区二区| 久久精品视频99| 亚洲欧洲日韩综合二区| 日韩一级精品视频在线观看| 免费亚洲网站| 亚洲国产精品久久久久| 欧美激情第六页| 日韩视频中文字幕| 欧美日韩国产探花| 亚洲欧美日韩人成在线播放| 亚洲午夜高清视频| 久久亚洲一区二区| 在线一区二区三区四区五区| 亚洲一区二区成人| 国产精品理论片| 欧美激情成人在线视频| 一区二区三区黄色| 欧美大色视频| 午夜精品网站| 在线观看日韩国产| 国产精品自在在线| 欧美激情综合色| 久久精品成人一区二区三区| 亚洲毛片在线| 亚洲伦伦在线| 激情久久中文字幕| 国产一区视频网站| 亚洲欧美日韩系列| 最近中文字幕日韩精品| 另类专区欧美制服同性| 亚洲人成网站在线播| 欧美在线观看一二区| 影音先锋欧美精品| 韩日欧美一区二区三区| 国产日产精品一区二区三区四区的观看方式 | 国产日韩一区二区三区在线播放| 欧美成人首页| 亚洲大胆美女视频| 日韩五码在线| 一个色综合导航| 亚洲图色在线| 久久久www成人免费精品| 久久久久久婷| 欧美精品激情在线观看| 国产精品久久久久久久久久三级 | 欧美一级黄色网| 韩国一区二区三区在线观看| 国内精品久久久久影院色 | 国产日韩欧美综合精品| 国产精品高潮视频| 国产色爱av资源综合区| 91久久精品美女高潮| 亚洲精品久久久蜜桃| 亚洲主播在线观看| 欧美精品久久久久久久| 国产精品视频| 亚洲免费影视| 一区二区三区欧美激情| 国产欧美一区二区三区视频| 美女尤物久久精品| 国产精品日韩欧美大师| 99精品黄色片免费大全| 欧美不卡一卡二卡免费版| 亚洲在线免费视频| 欧美日韩亚洲不卡| 一区二区欧美日韩| 日韩亚洲欧美成人| 亚洲国产精品久久| 久久精品日韩欧美| 一区二区三区国产| 国产精品久久久久久久久久久久| 欧美视频成人| 亚洲在线第一页| 中文久久乱码一区二区| 国产精品成人在线| 久久久99免费视频| 免费不卡在线观看| 欧美午夜免费| 亚洲欧洲av一区二区三区久久| 欧美在线不卡视频| 久久久久国产精品人| 亚洲精选成人| 久久久久久久网| 午夜欧美理论片| 99精品国产高清一区二区| 欧美日在线观看| 国产视频久久久久| 伊人久久大香线蕉综合热线| 欧美成人资源| 国产欧美精品| 亚洲人成啪啪网站| 国模私拍一区二区三区| 亚洲一区在线看| 久久色在线观看| 午夜视频在线观看一区二区| 久久久久久亚洲精品不卡4k岛国| 欧美另类变人与禽xxxxx| 久久国产精品亚洲va麻豆| 亚洲少妇最新在线视频| 极品日韩久久| 久久电影一区| 看欧美日韩国产| 国产日韩欧美不卡在线| 一本色道久久综合狠狠躁篇怎么玩| 久久综合给合| 在线色欧美三级视频| 香蕉久久一区二区不卡无毒影院| 国产日产精品一区二区三区四区的观看方式 | 欧美怡红院视频| 国产日韩1区| 久久精品亚洲|