<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Google面試筆試題

    時間:2024-05-18 21:12:22 面試筆試 我要投稿
    • 相關推薦

    Google面試筆試題

      谷歌筆試題:將無向無環連通圖轉換成深度最小的樹

    Google面試筆試題

      已知一個無向無環連通圖T的所有頂點和邊的信息,現需要將其轉換為一棵樹,要求樹的深度最小,請設計一個算法找到所有滿足要求的樹的根結點,并分析時空復雜度。

      最簡單直接的方法就是把每個節點都試一遍:

      假設某個節點為根節點,計算樹的深度。當遍歷完所有節點后,也就找到了使樹的深度最小的根節點。

      但這個方法的復雜度很高。如果有n個節點,則時間復雜度為O(n^2)。

      樹的深度取決于根節點到最深葉節點的距離,所以我們可以從葉節點入手。

      葉節點會且只會和某一個節點連通(反之不成立,因為根節點也可能只和一個節點連通),所以我們很容易找到所有可能的葉節點。

      題目可以等價于找到了兩個葉節點,使得兩個葉節點之間的距離最遠。根節點就是這兩個葉節點路徑的中間點(或者中間兩個點的任意一個)。

      我們可以每次都將連接度為1的節點刪掉,直到最后只剩下1個或2個節點,則這一個節點,或者兩個節點中的任意一個,就是我們要找的根節點。

      谷歌筆試題:將字符串中的小寫字母排在大寫字母的前面

      有一個由大小寫組成的字符串,現在需要對它進行修改,將其中的所有小寫字母排在大寫字母的前面(大寫或小寫字母之間不要求保持原來次序)。

      初始化兩個int變量A和B,代表字符串中的兩個位置。開始時A指向字符串的第一個字符,B指向字符串的最后一個字符。

      逐漸增加A的值使其指向一個大寫字母,逐漸減小B使其指向一個小寫字母,交換A,B所指向的字符,然后繼續增加A,減小B....。

      當A>=B時,就完成了重新排序。

      i指向最后一個小寫字符,j尋找小寫字符。

      void swapString(char* str, int len) { int i=-1; int j=0; for(j=0; j<len; str[j]="" &&="" if(str[j]<="z">='a') { i++; swap(str[i], str[j]); } } }

      谷歌筆試題:在重男輕女的國家里,男女的比例是多少?

      在一個重男輕女的國家里,每個家庭都想生男孩,如果他們生的孩子是女孩,就再生一個,直到生下的是男孩為止。這樣的國家,男女比例會是多少?

      還是1:1。

      在所有出生的第一個小孩中,男女比例是1:1;在所有出生的第二個小孩中,男女比例是1:1;.... 在所有出生的第n個小孩中,男女比例還是1:1。

      所以總的男女比例是1:1。

      谷歌筆試題:如何拷貝特殊鏈表

      有一個特殊的鏈表,其中每個節點不但有指向下一個節點的指針pNext,還有一個指向鏈表中任意節點的指針pRand,如何拷貝這個特殊鏈表?

      拷貝pNext指針非常容易,所以題目的難點是如何拷貝pRand指針。

      假設原來鏈表為A1 -> A2 ->... -> An,新拷貝鏈表是B1 -> B2 ->...-> Bn。

      為了能夠快速的找到pRand指向的節點,并把對應的關系拷貝到B中。我們可以將兩個鏈表合并成

      A1 -> B1 -> A2 -> B2 -> ... -> An -> Bn。

      從A1節點出發,很容易找到A1的pRand指向的節點Ax,然后也就找到了Bx,將B1的pRand指向Bx也就完成了B1節點pRand的拷貝。依次類推。

      當所有節點的pRand都拷貝完成后,再將合并鏈表分成兩個鏈表就可以了。

      class ListNode { int value; ListNode* p_next; ListNOde* p_rand; public ListNode(int v, ListNode* next, ListNode* rand): value(v), p_next(next), p_rand(rand) { } }; ListNode*copyList(ListNode*p) { if(p!=null) { /*構建交叉數組 p0->q0->p1->q1->p2->q2...*/ ListNOde*ppre=p; ListNode*post=->next; while(pre!=null) { pre->next=newListNode(pre->value,post,pre->p_rand->p_next); pre=last; lastlast=last->p_next; } /*拆分成被拷貝數組和拷貝數組 p0->p1->p2....;q0->q1->q2....*/ ppre=p; ListNode*res=p->p_next; while(res->p_next!=null) { p->p_next=res->p_next; res->p_next=res->p_next->p_next; } returnres; }else { returnp; } }

      如果在高速公路上30分鐘內看到一輛車開過的幾率是0.95,那么在10分鐘內看到一輛車開過的幾率是多少?(假設為常概率條件下)

      假設10分鐘內看到一輛車開過的概率是x,那么沒有看到車開過的概率就是1-x,30分鐘沒有看到車開過的概率是(1-x)^3,也就是0.05。所以得到方程(1-x)^3 = 0.05

      解方程得到x大約是0.63。

      谷歌筆試題:從25匹馬中找出最快的3匹

      最少需要7次。

      首先將馬分成a,b,c,d,e 5個組,每組5匹,每組單獨比賽。然后將每組的第一名放在一起比賽。假設結果如下

      a0,a1,a2,a3,a4

      b0,b1,b2,b3,b4

      c0,c1,c2,c3,c4

      d0,d1,d2,d3,d4

      e0,e1,e2,e3,e4

      其中a, b,c,d,e小組都是按照名次排列(速度a0>a1>a2>a3>a4, b0>b1....)。并第6次比賽的結果為a0>b0>c0>d0>e0。

      那么第6次比賽結束后,我們知道最快的一匹為a0。

      我們知道第2名的馬一定是a1或者b0,所以在接下來的比賽中要包含這兩匹馬。如果a1快,那么第3名是a2或者b0,如果b0快,那么第3名是a1,b1或者c0。也就是說第2名和第3名一定在a1,a2,b0,b1和c0當中,所以在第7場比賽中包括這5匹馬就可以得到第2名和第3名。

      所以7次比賽就可以獲得前3名的馬。

      谷歌筆試題:將無向無環連通圖轉換成深度最小的樹

      已知一個無向無環連通圖T的所有頂點和邊的信息,現需要將其轉換為一棵樹,要求樹的深度最小,請設計一個算法找到所有滿足要求的樹的根結點,并分析時空復雜度。

      最簡單直接的方法就是把每個節點都試一遍:

      假設某個節點為根節點,計算樹的深度。當遍歷完所有節點后,也就找到了使樹的深度最小的根節點。

      但這個方法的復雜度很高。如果有n個節點,則時間復雜度為O(n^2)。

      樹的深度取決于根節點到最深葉節點的距離,所以我們可以從葉節點入手。

      葉節點會且只會和某一個節點連通(反之不成立,因為根節點也可能只和一個節點連通),所以我們很容易找到所有可能的葉節點。

      題目可以等價于找到了兩個葉節點,使得兩個葉節點之間的距離最遠。根節點就是這兩個葉節點路徑的中間點(或者中間兩個點的任意一個)。

      我們可以每次都將連接度為1的節點刪掉,直到最后只剩下1個或2個節點,則這一個節點,或者兩個節點中的任意一個,就是我們要找的根節點。

      谷歌筆試題:將字符串中的小寫字母排在大寫字母的前面

      有一個由大小寫組成的字符串,現在需要對它進行修改,將其中的所有小寫字母排在大寫字母的前面(大寫或小寫字母之間不要求保持原來次序)。

      初始化兩個int變量A和B,代表字符串中的兩個位置。開始時A指向字符串的第一個字符,B指向字符串的最后一個字符。

      逐漸增加A的值使其指向一個大寫字母,逐漸減小B使其指向一個小寫字母,交換A,B所指向的字符,然后繼續增加A,減小B....。

      當A>=B時,就完成了重新排序。

      i指向最后一個小寫字符,j尋找小寫字符。

      void swapString(char* str, int len) { int i=-1; int j=0; for(j=0; j<len; str[j]="" &&="" if(str[j]<="z">='a') { i++; swap(str[i], str[j]); } } }

      谷歌筆試題:在重男輕女的國家里,男女的比例是多少?

      在一個重男輕女的國家里,每個家庭都想生男孩,如果他們生的孩子是女孩,就再生一個,直到生下的是男孩為止。這樣的國家,男女比例會是多少?

      還是1:1。

      在所有出生的第一個小孩中,男女比例是1:1;在所有出生的第二個小孩中,男女比例是1:1;.... 在所有出生的第n個小孩中,男女比例還是1:1。

      所以總的男女比例是1:1。

      谷歌筆試題:如何拷貝特殊鏈表

      有一個特殊的鏈表,其中每個節點不但有指向下一個節點的指針pNext,還有一個指向鏈表中任意節點的指針pRand,如何拷貝這個特殊鏈表?

      拷貝pNext指針非常容易,所以題目的難點是如何拷貝pRand指針。

      假設原來鏈表為A1 -> A2 ->... -> An,新拷貝鏈表是B1 -> B2 ->...-> Bn。

      為了能夠快速的找到pRand指向的節點,并把對應的關系拷貝到B中。我們可以將兩個鏈表合并成

      A1 -> B1 -> A2 -> B2 -> ... -> An -> Bn。

      從A1節點出發,很容易找到A1的pRand指向的節點Ax,然后也就找到了Bx,將B1的pRand指向Bx也就完成了B1節點pRand的拷貝。依次類推。

      當所有節點的pRand都拷貝完成后,再將合并鏈表分成兩個鏈表就可以了。

      class ListNode { int value; ListNode* p_next; ListNOde* p_rand; public ListNode(int v, ListNode* next, ListNode* rand): value(v), p_next(next), p_rand(rand) { } }; ListNode*copyList(ListNode*p) { if(p!=null) { /*構建交叉數組 p0->q0->p1->q1->p2->q2...*/ ListNOde*ppre=p; ListNode*post=->next; while(pre!=null) { pre->next=newListNode(pre->value,post,pre->p_rand->p_next); pre=last; lastlast=last->p_next; } /*拆分成被拷貝數組和拷貝數組 p0->p1->p2....;q0->q1->q2....*/ ppre=p; ListNode*res=p->p_next; while(res->p_next!=null) { p->p_next=res->p_next; res->p_next=res->p_next->p_next; } returnres; }else { returnp; } }

      如果在高速公路上30分鐘內看到一輛車開過的幾率是0.95,那么在10分鐘內看到一輛車開過的幾率是多少?(假設為常概率條件下)

      假設10分鐘內看到一輛車開過的概率是x,那么沒有看到車開過的概率就是1-x,30分鐘沒有看到車開過的概率是(1-x)^3,也就是0.05。所以得到方程(1-x)^3 = 0.05

      解方程得到x大約是0.63。

      谷歌筆試題:從25匹馬中找出最快的3匹

      最少需要7次。

      首先將馬分成a,b,c,d,e 5個組,每組5匹,每組單獨比賽。然后將每組的第一名放在一起比賽。假設結果如下

      a0,a1,a2,a3,a4

      b0,b1,b2,b3,b4

      c0,c1,c2,c3,c4

      d0,d1,d2,d3,d4

      e0,e1,e2,e3,e4

      其中a, b,c,d,e小組都是按照名次排列(速度a0>a1>a2>a3>a4, b0>b1....)。并第6次比賽的結果為a0>b0>c0>d0>e0。

      那么第6次比賽結束后,我們知道最快的一匹為a0。

      我們知道第2名的馬一定是a1或者b0,所以在接下來的比賽中要包含這兩匹馬。如果a1快,那么第3名是a2或者b0,如果b0快,那么第3名是a1,b1或者c0。也就是說第2名和第3名一定在a1,a2,b0,b1和c0當中,所以在第7場比賽中包括這5匹馬就可以得到第2名和第3名。

      所以7次比賽就可以獲得前3名的馬。


    【Google面試筆試題】相關文章:

    名企面試試題 面試題目 Google02-24

    google招聘筆試題02-18

    Google筆試題目分享11-21

    Google令人抓狂的面試題,看看你能承受幾個11-19

    Google公司預選筆試試題02-18

    Google面試官談面試技巧02-18

    剛剛完成了Google的電話面試11-19

    google一面面試面經分享!02-24

    求教筆面試的時間02-23

    面試題精選02-18

    主站蜘蛛池模板: 久久精品无码一区二区三区| 亚洲а∨天堂久久精品| 国语自产精品视频在线观看| 国产最新进精品视频| 久久久WWW成人免费精品| 国产精品v欧美精品v日韩精品| 免费看污污的网站欧美国产精品不卡在线观看 | 亚洲国产成人久久精品影视| 无码人妻精品一区二区三区东京热 | 国产成人精品免费视频网页大全 | 精品国产福利在线观看| 亚洲精品欧美精品日韩精品 | 欧美精品高清在线xxxx| 色花堂国产精品第一页| 国产精品高清一区二区三区| 中文字幕久久精品| 久久久精品日本一区二区三区 | 亚洲国产精品无码av| 久久久久久无码国产精品中文字幕 | 亚洲AV永久纯肉无码精品动漫| 久久久久九九精品影院| 精品a在线观看| 精品久久久久久99人妻| 夜色www国产精品资源站| 欧美精品国产日韩综合在线| 国产精品黄网站| 国产99久久精品一区二区| 国产精品后入内射日本在线观看| 少妇人妻无码精品视频| 亚洲精品美女久久777777| 在线中文字幕精品第5页| 亚洲精品无码AV中文字幕电影网站 | japanese乱人伦精品| 国产在线精品无码二区| 国产精品揄拍100视频| 国产精品久久久久AV福利动漫| 99久久人妻无码精品系列蜜桃| 国产精品欧美亚洲韩国日本| 国产精品手机在线| 久久er国产精品免费观看2| 欧美极品欧美精品欧美视频|