日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

精選微軟等公司,數據結構+算法,經典面試100題

??????????????????????????????????????--------之前40題


--------------- --------------
1.把二元查找樹轉變成排序的雙向鏈表
?題目:
輸入一棵二元查找樹,將該二元查找樹轉換成一個排序的雙向鏈表。
要求不能創建任何新的結點,只調整指針的指向。
? ?
? 10
? / /
?6 14
?/ / / /
4 8 12 16
? ?
?轉換成雙向鏈表
4=6=8=10=12=14=16。
? ?
?首先我們定義的二元查找樹 節點的數據結構如下:
?struct BSTreeNode
{
? int m_nValue; // value of node
? BSTreeNode *m_pLeft; // left child of node
? BSTreeNode *m_pRight; // right child of node
};


2.設計包含min函數的棧。
定義棧的數據結構,要求添加一個min函數,能夠得到棧的最小元素。
要求函數min、push以及pop的時間復雜度都是O(1)。


3.求子數組的最大和
題目:
輸入一個整形數組,數組里有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間復雜度為O(n)。

例如輸入的數組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組為3, 10, -4, 7, 2,
因此輸出為該子數組的和18。


4.在二元樹中找出和為某一值的所有路徑
題目:輸入一個整數和一棵二元樹。
從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。
打印出和與輸入整數相等的所有路徑。
例如 輸入整數22和如下二元樹
? 10 ?
? / / ?
? 5 12 ?
? / / ?
? 4 7
則打印出兩條路徑:10, 12和10, 5, 7。

二元樹節點的數據結構定義為:

struct BinaryTreeNode // a node in the binary tree
{
int m_nValue; // value of node
BinaryTreeNode *m_pLeft; // left child of node
BinaryTreeNode *m_pRight; // right child of node
};


5.查找最小的k個元素
題目:輸入n個整數,輸出其中最小的k個。
例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。


第6題
------------------------------------
騰訊面試題: ?
給你10分鐘時間,根據上排給出十個數,在其下排填出對應的十個數 ?
要求下排每個數都是先前上排那十個數在下排出現的次數。 ?
上排的十個數如下: ?
【0,1,2,3,4,5,6,7,8,9】

初看此題,貌似很難,10分鐘過去了,可能有的人,題目都還沒看懂。 ?

舉一個例子, ?
數值: 0,1,2,3,4,5,6,7,8,9 ?
分配: 6,2,1,0,0,0,1,0,0,0 ?
0在下排出現了6次,1在下排出現了2次, ?
2在下排出現了1次,3在下排出現了0次.... ?
以此類推..???

?

第7題
------------------------------------
微軟亞院之編程判斷倆個鏈表是否相交
給出倆個單向鏈表的頭指針,比如h1,h2,判斷這倆個鏈表是否相交。
為了簡化問題,我們假設倆個鏈表均不帶環。

問題擴展:
1.如果鏈表可能有環列?
2.如果需要求出倆個鏈表相交的第一個節點列?


第8題
------------------------------------
此貼選一些 比較怪的題,,由于其中題目本身與算法關系不大,僅考考思維。特此并作一題。
1.有兩個房間,一間房里有三盞燈,另一間房有控制著三盞燈的三個開關,這兩個房間是 分割開的,
從一間里不能看到另一間的情況。
現在要求受訓者分別進這兩房間一次,然后判斷出這三盞燈分別是由哪個開關控制的。
有什么辦法呢?

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

3  ★用一種算法來顛倒一個鏈接表的順序。現在在不用遞歸式的情況下做一遍。
  ★用一種算法在一個循環的鏈接表里插入一個節點,但不得穿越鏈接表。
  ★用一種算法整理一個數組。你為什么選擇這種方法?
  ★用一種算法使通用字符串相匹配。
  ★顛倒一個字符串。優化速度。優化空間。
  ★顛倒一個句子中的詞的順序,比如將“我叫克麗絲”轉換為“克麗絲叫我”,實現速度最快,移動最少。
  ★找到一個子字符串。優化速度。優化空間。
  ★比較兩個字符串,用O(n)時間和恒量空間。
  ★假設你有一個用1001個整數組成的數組,這些整數是任意排列的,但是你知道所有的整數都在1到1000(包括1000)之間。此外,除一個數字出現兩次外,其他所有數字只出現一次
。假設你只能對這個數組做一次處理,用一種算法找出重復的那個數字。
如果你在運算中使用了輔助的存儲方式,那么你能找到不用這種方式的算法嗎?
  ★不用乘法或加法增加8倍。現在用同樣的方法增加7倍。


第9題
-----------------------------------
判斷整數序列是不是二元查找樹的后序遍歷結果
題目:輸入一個整數數組,判斷該數組是不是某二元查找樹的后序遍歷的結果。
如果是返回true,否則返回false。
例如輸入5、7、6、9、11、10、8,由于這一整數序列是如下樹的后序遍歷結果:
? 8
? / /
? 6 10
? / / / /
? 5 7 9 11
因此返回true。
如果輸入7、4、6、5,沒有哪棵樹的后序遍歷的結果是這個序列,因此返回false。


第10題
---------------------------------
翻轉句子中單詞的順序。
題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。
為簡單起見,標點符號和普通字母一樣處理。
例如輸入“I am a student.”,則輸出“student. a am I”。


第11題
------------------------------------
求二叉樹中節點的最大距離...

如果我們把二叉樹看成一個圖,
父子節點之間的連線看成是雙向的,
我們姑且定義"距離"為兩節點之間邊的個數。
寫一個程序,
求一棵二叉樹中相距最遠的兩個節點之間的距離。


第12題
題目:求1+2+…+n,
要求不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。


第13題:
題目:輸入一個單向鏈表,輸出該鏈表中倒數第k個結點。鏈表的倒數第0個結點為鏈表的尾指針。
鏈表結點定義如下: ?
struct ListNode
{
? int m_nKey;
? ListNode* m_pNext;
};


第14題:
題目:輸入一個已經按升序排序過的數組和一個數字,
在數組中查找兩個數,使得它們的和正好是輸入的那個數字。
要求時間復雜度是O(n)。如果有多對數字的和等于輸入的數字,輸出任意一對即可。
例如輸入數組1、2、4、7、11、15和數字15。由于4+11=15,因此輸出4和11。


第15題:
題目:輸入一顆二元查找樹,將該樹轉換為它的鏡像,
即在轉換后的二元查找樹中,左子樹的結點都大于右子樹的結點。
用遞歸和循環兩種方法完成樹的鏡像轉換。 ?
例如輸入:
? 8
? / /
? 6 10
?// //
5 7 9 11

輸出:
? 8
? / /
?10 6
?// //
11 9 7 5

定義二元查找樹的結點為:
struct BSTreeNode // a node in the binary search tree (BST)
{
? int m_nValue; // value of node
? BSTreeNode *m_pLeft; // left child of node
? BSTreeNode *m_pRight; // right child of node
};


第16題:
題目(微軟):
輸入一顆二元樹,從上往下按層打印樹的每個結點,同一層中按照從左往右的順序打印。 ?
例如輸入
? 8
? / /
?6 10
/ / / /
5 7 9 11

輸出8 6 10 5 7 9 11。


第17題:
題目:在一個字符串中找到第一個只出現一次的字符。如輸入abaccdeff,則輸出b。 ?
分析:這道題是2006年google的一道筆試題。


第18題:
題目:n個數字(0,1,…,n-1)形成一個圓圈,從數字0開始,
每次從這個圓圈中刪除第m個數字(第一個為當前數字本身,第二個為當前數字的下一個數字)。
當一個數字刪除后,從被刪除數字的下一個繼續刪除第m個數字。
求出在這個圓圈中剩下的最后一個數字。
July:我想,這個題目,不少人已經 見識過了。


第19題:
題目:定義Fibonacci數列如下: ?
? / 0 n=0
f(n)= 1 n=1
? / f(n-1)+f(n-2) n=2

輸入n,用最快的方法求該數列的第n項。
分析:在很多C語言教科書中講到遞歸函數的時候,都會用Fibonacci作為例子。
因此很多程序員對這道題的遞歸解法非常熟悉,但....呵呵,你知道的。。


第20題:
題目:輸入一個表示整數的字符串,把該字符串轉換成整數并輸出。
例如輸入字符串"345",則輸出整數345。


第21題
2010年中興面試題
編程求解:
輸入兩個整數 n 和 m,從數列1,2,3.......n 中 隨意取幾個數,
使其和等于 m ,要求將其中所有的可能組合列出來.



第22題:
有4張紅色的牌和4張藍色的牌,主持人先拿任意兩張,再分別在A、B、C三人額頭上貼任意兩張牌,
A、B、C三人都可以看見其余兩人額頭上的牌,看完后讓他們猜自己額頭上是什么顏色的牌,
A說不知道,B說不知道,C說不知道,然后A說知道了。
請教如何推理,A是怎么知道的。
如果用程序,又怎么實現呢?



第23題:
用最簡單, 最快速的方法計算出下面這個圓形是否和正方形相交。" ?
3D坐標系 原點(0.0,0.0,0.0)
圓形:
半徑r = 3.0
圓心o = (*.*, 0.0, *.*)

正方形:
4個角坐標; ?
1:(*.*, 0.0, *.*)
2:(*.*, 0.0, *.*)
3:(*.*, 0.0, *.*)
4:(*.*, 0.0, *.*)



第24題:
鏈表操作,
(1).單鏈表就地逆置,
(2)合并鏈表


第25題:
寫一個函數,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出連續最長的數字串,并把這個串的長度返回,
并把這個最長數字串付給其中一個函數參數outputstr所指內存。
例如:"abcd12345ed125ss123456789"的首地址傳給intputstr后,函數將返回9,
outputstr所指的值為123456789


26.左旋轉字符串

題目:
定義字符串的左旋轉操作:把字符串前面的若干個字符移動到字符串的尾部。

如把字符串abcdef左旋轉2位得到字符串cdefab。請實現字符串左旋轉的函數。
要求時間對長度為n的字符串操作的復雜度為O(n),輔助內存為O(1)。


27.跳臺階問題
題目:一個臺階總共有n級,如果一次可以跳1級,也可以跳2級。
求總共有多少總跳法,并分析算法的時間復雜度。

這道題最近經常出現,包括MicroStrategy等比較重視算法的公司都
曾先后選用過個這道題作為面試題或者筆試題。


28.整數的二進制表示中1的個數
題目:輸入一個整數,求該整數的二進制表達中有多少個1。
例如輸入10,由于其二進制表示為1010,有兩個1,因此輸出2。

分析:
這是一道很基本的考查位運算的面試題。
包括微軟在內的很多公司都曾采用過這道題。


29.棧的push、pop序列
題目:輸入兩個整數序列。其中一個序列表示棧的push順序,
判斷另一個序列有沒有可能是對應的pop順序。
為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。 ?

比如輸入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一個pop系列。
因為可以有如下的push和pop序列:
push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,
這樣得到的pop序列就是4、5、3、2、1。
但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。


30.在從1到n的正數中1出現的次數
題目:輸入一個整數n,求從1到n這n個整數的十進制表示中1出現的次數。

例如輸入12,從1到12這些整數中包含1 的數字有1,10,11和12,1一共出現了5次。
分析:這是一道廣為流傳的google面試題。


31.華為面試題:
一類似于蜂窩的結構的圖,進行搜索最短路徑(要求5分鐘)


32.
有兩個序列a,b,大小都為n,序列元素的值任意整數,無序;
要求:通過交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
例如: ?
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];


33.
實現一個挺高級的字符匹配算法:
給一串很長字符串,要求找到符合要求的字符串,例如目的串:123
1******3***2 ,12*****3這些都要找出來
其實就是類似一些和諧系統。。。。。


34.
實現一個隊列。
隊列的應用場景為:
一個生產者線程將int類型的數入列,一個消費者線程將int類型的數出列


35.
求一個矩陣中最大的二維矩陣(元素和最大).如:
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的是:
4 5
5 3
要求:(1)寫出算法;(2)分析時間復雜度;(3)用C寫出關鍵代碼


第36題-40題(有些題目搜集于CSDN上的網友,已標明):
36.引用自網友:longzuo
谷歌筆試:
n支隊伍比賽,分別編號為0,1,2。。。。n-1,已知它們之間的實力對比關系,
存儲在一個二維數組w[n][n]中,w[i][j] 的值代表編號為i,j的隊伍中更強的一支。

所以w[i][j]=i 或者j,現在給出它們的出場順序,并存儲在數組order[n]中,
比如order[n] = {4,3,5,8,1......},那么第一輪比賽就是 4對3, 5對8。.......

勝者晉級,敗者淘汰,同一輪淘汰的所有隊伍排名不再細分,即可以隨便排,
下一輪由上一輪的勝者按照順序,再依次兩兩比,比如可能是4對5,直至出現第一名

編程實現,給出二維數組w,一維數組order 和 用于輸出比賽名次的數組result[n],求出result。


37.
有n個長為m+1的字符串,
如果某個字符串的最后m個字符與某個字符串的前m個字符匹配,則兩個字符串可以聯接,
問這n個字符串最多可以連成一個多長的字符串,如果出現循環,則返回錯誤。


38.
百度面試:
1.用天平(只能比較,不能稱重)從一堆小球中找出其中唯一一個較輕的,使用x次天平,最多可以從y個小球中找出較輕的那個,求y與x的關系式
2.有一個很大很大的輸入流,大到沒有存儲器可以將其存儲下來,而且只輸入一次,如何從這個輸入流中隨機取得m個記錄
3.大量的URL字符串,如何從中去除重復的,優化時間空間復雜度



39.
網易有道筆試:
(1).
求一個二叉樹中任意兩個節點間的最大距離,
兩個節點的距離的定義是 這兩個節點間邊的個數,
比如某個孩子節點和父節點間的距離是1,和相鄰兄弟節點間的距離是2,優化時間空間復雜度。

(2).
求一個有向連通圖的割點,割點的定義是,如果除去此節點和與其相關的邊,
有向圖不再連通,描述算法。


40.百度研發筆試題
引用自:zp155334877
1)設計一個棧結構,滿足一下條件:min,push,pop操作的時間復雜度為O(1)。

2)一串首尾相連的珠子(m個),有N種顏色(N<=10),
設計一個算法,取出其中一段,要求包含所有N中顏色,并使長度最短。
并分析時間復雜度與空間復雜度。

3)設計一個系統處理詞語搭配問題,比如說 中國 和人民可以搭配,
則中國人民 人民中國都有效。要求:

? *系統每秒的查詢數量可能上千次;
? *詞語的數量級為10W;
? *每個詞至多可以與1W個詞搭配

當用戶輸入中國人民的時候,要求返回與這個搭配詞組相關的信息。


?

作者聲明:

1.由于其中大部題目搜集于網絡。有的流傳甚廣,個別題,我已無法考究,究竟最初源自哪里。

但,所有資料如此精選整理,的確是出自于我手。且題目的答案由我個人和一些網友完成。

如此,我自稱為作者,我想并不過分。

2.作者本人July對以上所有任何資料享有版權。轉載請注明出處。謝謝。July。

總結

以上是生活随笔為你收集整理的[整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。