版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數(shù)據結構+算法面試100題~~~摘自CSDN,作者July1.把二元查找樹轉變成排序的雙向鏈表(樹)題目:輸入一棵二元查找樹,將該二元查找樹轉換成一個排序的雙向鏈表。規(guī)定不能創(chuàng)建任何新的結點,只調整指針的指向。10//614////481216轉換成雙向鏈表4=6=8=10=12=14=16。一方面我們定義的二元查找樹節(jié)點的數(shù)據結構如下:structBSTreeNode{intm_nValue;//valueofnodeBSTreeNode*m_pLeft;//leftchildofnodeBSTreeNode*m_pRight;//rightchildofnode};2.設計包含min函數(shù)的棧(棧)定義棧的數(shù)據結構,規(guī)定添加一個min函數(shù),可以得到棧的最小元素。規(guī)定函數(shù)min、push以及pop的時間復雜度都是O(1)。參見C:\Users\Administrator\Desktop\demo\Stack分析:min時間復雜度要達成O(1),需要我們在棧中存儲最小元素3.求子數(shù)組的最大和(數(shù)組)題目:輸入一個整形數(shù)組,數(shù)組里有正數(shù)也有負數(shù)。數(shù)組中連續(xù)的一個或多個整數(shù)組成一個子數(shù)組,每個子數(shù)組都有一個和。求所有子數(shù)組的和的最大值。規(guī)定期間復雜度為O(n)。例如輸入的數(shù)組為1,-2,3,10,-4,7,2,-5,和最大的子數(shù)組為3,10,-4,7,2,因此輸出為該子數(shù)組的和18。分析:根據dp思想#include<stdio.h>
#defineN8
intmain()
{
inti,a[N]={1,-2,3,10,-4,7,2,-5};
intfrom[N],result[N],max;
max=0;
from[0]=0;
result[0]=a[0];
for(i=1;i<N;++i)
{
if(result[i-1]>0)
{
from[i]=from[i-1];
result[i]=a[i]+result[i-1];
}
else
{
from[i]=i;
result[i]=a[i];
}
if(result[i]>result[max])
max=i;
}
printf("%d->%d:%d\n",from[max],max,result[max]);
return0;
}4.在二元樹中找出和為某一值的所有途徑(樹)題目:輸入一個整數(shù)和一棵二元樹。從樹的根結點開始往下訪問一直到葉結點所通過的所有結點形成一條途徑。打印出和與輸入整數(shù)相等的所有途徑。例如輸入整數(shù)22和如下二元樹10//512//47則打印出兩條途徑:10,12和10,5,7。二元樹節(jié)點的數(shù)據結構定義為:structBinaryTreeNode//anodeinthebinarytree{intm_nValue;//valueofnodeBinaryTreeNode*m_pLeft;//leftchildofnodeBinaryTreeNode*m_pRight;//rightchildofnode};5.查找最小的k個元素(數(shù)組)題目:輸入n個整數(shù),輸出其中最小的k個。例如輸入1,2,3,4,5,6,7和8這8個數(shù)字,則最小的4個數(shù)字為1,2,3和4。第6題(數(shù)組)騰訊面試題:給你10分鐘時間,根據上排給出十個數(shù),在其下排填出相應的十個數(shù)規(guī)定下排每個數(shù)都是先前上排那十個數(shù)在下排出現(xiàn)的次數(shù)。上排的十個數(shù)如下:【0,1,2,3,4,5,6,7,8,9】舉一個例子,數(shù)值:0,1,2,3,4,5,6,7,8,9分派:6,2,1,0,0,0,1,0,0,00在下排出現(xiàn)了6次,1在下排出現(xiàn)了2次,2在下排出現(xiàn)了1次,3在下排出現(xiàn)了0次....以此類推..第7題(鏈表)微軟亞院之編程判斷倆個鏈表是否相交給出倆個單向鏈表的頭指針,比如h1,h2,判斷這倆個鏈表是否相交。為了簡化問題,我們假設倆個鏈表均不帶環(huán)。問題擴展:1.假如鏈表也許有環(huán)列?2.假如需規(guī)定出倆個鏈表相交的第一個節(jié)點列?第8題(算法)此貼選一些比較怪的題,,由于其中題目自身與算法關系不大,僅考考思維。特此并作一題。1.有兩個房間,一間房里有三盞燈,另一間房有控制著三盞燈的三個開關,這兩個房間是分割開的,從一間里不能看到另一間的情況?,F(xiàn)在規(guī)定受訓者分別進這兩房間一次,然后判斷出這三盞燈分別是由哪個開關控制的。有什么辦法呢?2.你讓一些人為你工作了七天,你要用一根金條作為報酬。金條被提成七小塊,天天給出一塊。假如你只能將金條切割兩次,你如何分給這些工人?3.★用一種算法來顛倒一個鏈接表的順序?,F(xiàn)在在不用遞歸式的情況下做一遍?!镉靡环N算法在一個循環(huán)的鏈接表里插入一個節(jié)點,但不得穿越鏈接表?!镉靡环N算法整理一個數(shù)組。你為什么選擇這種方法?★用一種算法使通用字符串相匹配。★顛倒一個字符串。優(yōu)化速度。優(yōu)化空間?!镱嵉挂粋€句子中的詞的順序,比如將“我叫克麗絲”轉換為“克麗絲叫我”,實現(xiàn)速度最快,移動最少?!镎业揭粋€子字符串。優(yōu)化速度。優(yōu)化空間?!锉容^兩個字符串,用O(n)時間和恒量空間。★假設你有一個用1001個整數(shù)組成的數(shù)組,這些整數(shù)是任意排列的,但是你知道所有的整數(shù)都在1到1000(涉及1000)之間。此外,除一個數(shù)字出現(xiàn)兩次外,其他所有數(shù)字只出現(xiàn)一次。假設你只能對這個數(shù)組做一次解決,用一種算法找出反復的那個數(shù)字。假如你在運算中使用了輔助的存儲方式,那么你能找到不用這種方式的算法嗎?★不用乘法或加法增長8倍?,F(xiàn)在用同樣的方法增長7倍。第9題(樹)判斷整數(shù)序列是不是二元查找樹的后序遍歷結果題目:輸入一個整數(shù)數(shù)組,判斷該數(shù)組是不是某二元查找樹的后序遍歷的結果。假如是返回true,否則返回false。例如輸入5、7、6、9、11、10、8,由于這一整數(shù)序列是如下樹的后序遍歷結果:8//610////57911因此返回true。假如輸入7、4、6、5,沒有哪棵樹的后序遍歷的結果是這個序列,因此返回false。第10題(字符串)翻轉句子中單詞的順序。題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。為簡樸起見,標點符號和普通字母同樣解決。例如輸入“Iamastudent.”,則輸出“student.aamI”。第11題(樹)求二叉樹中節(jié)點的最大距離...假如我們把二叉樹當作一個圖,父子節(jié)點之間的連線當作是雙向的,我們姑且定義"距離"為兩節(jié)點之間邊的個數(shù)。寫一個程序,求一棵二叉樹中相距最遠的兩個節(jié)點之間的距離。第12題(語法)題目:求1+2+…+n,規(guī)定不能使用乘除法、for、while、if、else、switch、case等關鍵字以及條件判斷語句(A?B:C)。第13題(鏈表):題目:輸入一個單向鏈表,輸出該鏈表中倒數(shù)第k個結點。鏈表的倒數(shù)第0個結點為鏈表的尾指針。鏈表結點定義如下:structListNode{intm_nKey;ListNode*m_pNext;};第14題(數(shù)組):題目:輸入一個已經按升序排序過的數(shù)組和一個數(shù)字,在數(shù)組中查找兩個數(shù),使得它們的和正好是輸入的那個數(shù)字。規(guī)定期間復雜度是O(n)。假如有多對數(shù)字的和等于輸入的數(shù)字,輸出任意一對即可。例如輸入數(shù)組1、2、4、7、11、15和數(shù)字15。由于4+11=15,因此輸出4和11。第15題(樹):題目:輸入一顆二元查找樹,將該樹轉換為它的鏡像,即在轉換后的二元查找樹中,左子樹的結點都大于右子樹的結點。用遞歸和循環(huán)兩種方法完畢樹的鏡像轉換。例如輸入:8//610////57911輸出:8//106////11975定義二元查找樹的結點為:structBSTreeNode//anodeinthebinarysearchtree(BST){intm_nValue;//valueofnodeBSTreeNode*m_pLeft;//leftchildofnodeBSTreeNode*m_pRight;//rightchildofnode};第16題(樹):題目(微軟):輸入一顆二元樹,從上往下按層打印樹的每個結點,同一層中按照從左往右的順序打印。例如輸入8//610////57911輸出861057911。第17題(字符串):題目:在一個字符串中找到第一個只出現(xiàn)一次的字符。如輸入abaccdeff,則輸出b。分析:這道題是2023年google的一道筆試題。第18題(數(shù)組):題目:n個數(shù)字(0,1,…,n-1)形成一個圓圈,從數(shù)字0開始,每次從這個圓圈中刪除第m個數(shù)字(第一個為當前數(shù)字自身,第二個為當前數(shù)字的下一個數(shù)字)。當一個數(shù)字刪除后,從被刪除數(shù)字的下一個繼續(xù)刪除第m個數(shù)字。求出在這個圓圈中剩下的最后一個數(shù)字。July:我想,這個題目,不少人已經見識過了。第19題(數(shù)組、遞歸):題目:定義Fibonacci數(shù)列如下:/0n=0f(n)=1n=1/f(n-1)+f(n-2)n=2輸入n,用最快的方法求該數(shù)列的第n項。分析:在很多C語言教科書中講到遞歸函數(shù)的時候,都會用Fibonacci作為例子。因此很多程序員對這道題的遞歸解法非常熟悉,但....呵呵,你知道的。。第20題(字符串):題目:輸入一個表達整數(shù)的字符串,把該字符串轉換成整數(shù)并輸出。例如輸入字符串"345",則輸出整數(shù)345。第21題(數(shù)組)2023年中興面試題編程求解:輸入兩個整數(shù)n和m,從數(shù)列1,2,3.......n中隨意取幾個數(shù),使其和等于m,規(guī)定將其中所有的也許組合列出來.第22題(推理):有4張紅色的牌和4張藍色的牌,主持人先拿任意兩張,再分別在A、B、C三人額頭上貼任意兩張牌,A、B、C三人都可以看見其余兩人額頭上的牌,看完后讓他們猜自己額頭上是什么顏色的牌,A說不知道,B說不知道,C說不知道,然后A說知道了。請教如何推理,A是怎么知道的。假如用程序,又怎么實現(xiàn)呢?第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題(鏈表):鏈表操作,單鏈表就地逆置,第25題(字符串):寫一個函數(shù),它的原形是intcontinumax(char*outputstr,char*intputstr)功能:在字符串中找出連續(xù)最長的數(shù)字串,并把這個串的長度返回,并把這個最長數(shù)字串付給其中一個函數(shù)參數(shù)outputstr所指內存。例如:"abcd12345ed125ss"的首地址傳給intputstr后,函數(shù)將返回9,outputstr所指的值為26.左旋轉字符串(字符串)題目:定義字符串的左旋轉操作:把字符串前面的若干個字符移動到字符串的尾部。如把字符串abcdef左旋轉2位得到字符串cdefab。請實現(xiàn)字符串左旋轉的函數(shù)。規(guī)定期間對長度為n的字符串操作的復雜度為O(n),輔助內存為O(1)。27.跳臺階問題(遞歸)題目:一個臺階總共有n級,假如一次可以跳1級,也可以跳2級。求總共有多少總跳法,并分析算法的時間復雜度。這道題最近經常出現(xiàn),涉及MicroStrategy等比較重視算法的公司都曾先后選用過個這道題作為面試題或者筆試題。28.整數(shù)的二進制表達中1的個數(shù)(運算)題目:輸入一個整數(shù),求該整數(shù)的二進制表達中有多少個1。例如輸入10,由于其二進制表達為1010,有兩個1,因此輸出2。分析:這是一道很基本的考察位運算的面試題。涉及微軟在內的很多公司都曾采用過這道題。29.棧的push、pop序列(棧)題目:輸入兩個整數(shù)序列。其中一個序列表達棧的push順序,判斷另一個序列有沒有也許是相應的pop順序。為了簡樸起見,我們假設push序列的任意兩個整數(shù)都是不相等的。比如輸入的push序列是1、2、3、4、5,那么4、5、3、2、1就有也許是一個pop系列。由于可以有如下的push和pop序列:push1,push2,push3,push4,pop,push5,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的正數(shù)中1出現(xiàn)的次數(shù)(數(shù)組)題目:輸入一個整數(shù)n,求從1到n這n個整數(shù)的十進制表達中1出現(xiàn)的次數(shù)。例如輸入12,從1到12這些整數(shù)中包含1的數(shù)字有1,10,11和12,1一共出現(xiàn)了5次。分析:這是一道廣為流傳的google面試題。31.華為面試題(搜索):一類似于蜂窩的結構的圖,進行搜索最短途徑(規(guī)定5分鐘)32.(數(shù)組、規(guī)劃)有兩個序列a,b,大小都為n,序列元素的值任意整數(shù),無序;規(guī)定:通過互換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。例如:vara=[100,99,98,1,2,3];varb=[1,2,3,4,5,40];33.(字符串)實現(xiàn)一個挺高級的字符匹配算法:給一串很長字符串,規(guī)定找到符合規(guī)定的字符串,例如目的串:1231******3***2,12*****3這些都要找出來其實就是類似一些和諧系統(tǒng)。。。。。34.(隊列)實現(xiàn)一個隊列。隊列的應用場景為:一個生產者線程將int類型的數(shù)入列,一個消費者線程將int類型的數(shù)出列35.(矩陣)求一個矩陣中最大的二維矩陣(元素和最大).如:120342345111530中最大的是:4553規(guī)定:(1)寫出算法;(2)分析時間復雜度;(3)用C寫出關鍵代碼第36題-40題(有些題目搜集于CSDN上的網友,已標明):36.引用自網友:longzuo(運算)谷歌筆試:n支隊伍比賽,分別編號為0,1,2。。。。n-1,已知它們之間的實力對比關系,存儲在一個二維數(shù)組w[n][n]中,w[i][j]的值代表編號為i,j的隊伍中更強的一支。所以w[i][j]=i或者j,現(xiàn)在給出它們的出場順序,并存儲在數(shù)組order[n]中,比如order[n]={4,3,5,8,1......},那么第一輪比賽就是4對3,5對8。.......勝者晉級,敗者淘汰,同一輪淘汰的所有隊伍排名不再細分,即可以隨便排,下一輪由上一輪的勝者按照順序,再依次兩兩比,比如也許是4對5,直至出現(xiàn)第一名編程實現(xiàn),給出二維數(shù)組w,一維數(shù)組order和用于輸出比賽名次的數(shù)組result[n],求出result。37.(字符串)有n個長為m+1的字符串,假如某個字符串的最后m個字符與某個字符串的前m個字符匹配,則兩個字符串可以聯(lián)接,問這n個字符串最多可以連成一個多長的字符串,假如出現(xiàn)循環(huán),則返回錯誤。38.(算法)百度面試:1.用天平(只能比較,不能稱重)從一堆小球中找出其中唯一一個較輕的,使用x次天平,最多可以從y個小球中找出較輕的那個,求y與x的關系式。2.有一個很大很大的輸入流,大到沒有存儲器可以將其存儲下來,并且只輸入一次,如何從這個輸入流中隨機取得m個記錄。3.大量的URL字符串,如何從中去除反復的,優(yōu)化時間空間復雜度39.(樹、圖、算法)網易有道筆試:(1).求一個二叉樹中任意兩個節(jié)點間的最大距離,兩個節(jié)點的距離的定義是這兩個節(jié)點間邊的個數(shù),比如某個孩子節(jié)點和父節(jié)點間的距離是1,和相鄰兄弟節(jié)點間的距離是2,優(yōu)化時間空間復雜度。(2).求一個有向連通圖的割點,割點的定義是,假如除去此節(jié)點和與其相關的邊,有向圖不再連通,描述算法。40.百度研發(fā)筆試題(棧、算法)引用自:zp1)設計一個棧結構,滿足一下條件:min,push,pop操作的時間復雜度為O(1)。2)一串首尾相連的珠子(m個),有N種顏色(N<=10),設計一個算法,取出其中一段,規(guī)定包含所有N中顏色,并使長度最短。并分析時間復雜度與空間復雜度。3)設計一個系統(tǒng)解決詞語搭配問題,比如說中國和人民可以搭配,則中國人民人民中國都有效。規(guī)定:*系統(tǒng)每秒的查詢數(shù)量也許上千次;*詞語的數(shù)量級為10W;*每個詞至多可以與1W個詞搭配當用戶輸入中國人民的時候,規(guī)定返回與這個搭配詞組相關的信息。41.求固晶機的晶元查找程序(匹配、算法)晶元盤由數(shù)目不詳?shù)拇笮⊥瑯拥木гM成,晶元并不一定全充滿晶元盤,照相機每次這能匹配一個晶元,如匹配過,則拾取該晶元,若匹配但是,照相機則按測好的晶元間距移到下一個位置。求遍歷晶元盤的算法求思緒。42.請修改append函數(shù),運用這個函數(shù)實現(xiàn)(鏈表):兩個非降序鏈表的并集,1->2->3和2->3->5并為1->2->3->5此外只能輸出結果,不能修改兩個鏈表的數(shù)據。43.遞歸和非遞歸倆種方法實現(xiàn)二叉樹的前序遍歷。44.騰訊面試題(算法):1.設計一個魔方(六面)的程序。2.有一千萬條短信,有反復,以文本文獻的形式保存,一行一條,有反復。請用5分鐘時間,找出反復出現(xiàn)最多的前10條。3.收藏了1萬條url,現(xiàn)在給你一條url,如何找出相似的url。(面試官不解釋何為相似)45.雅虎(運算、矩陣):1.對于一個整數(shù)矩陣,存在一種運算,對矩陣中任意元素加一時,需要其相鄰(上下左右)某一個元素也加一,現(xiàn)給出一正數(shù)矩陣,判斷其是否可以由一個全零矩陣通過上述運算得到。2.一個整數(shù)數(shù)組,長度為n,將其分為m份,使各份的和相等,求m的最大值比如{3,2,4,3,6}可以提成{3,2,4,3,6}m=1;{3,6}{2,4,3}m=2{3,3}{2,4}{6}m=3所以m的最大值為346.搜狐(運算):四對括號可以有多少種匹配排列方式?比如兩對括號可以有兩種:()()和(())47.創(chuàng)新工場(算法):求一個數(shù)組的最長遞減子序列比如{9,4,3,2,5,4,3,2}的最長遞減子序列為{9,5,4,3,2}48.微軟(運算):一個數(shù)組是由一個遞減數(shù)列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移兩位形成的,在這種數(shù)組中查找某一個數(shù)。49.一道看上去很嚇人的算法面試題(排序、算法):如何對n個數(shù)進行排序,規(guī)定期間復雜度O(n),空間復雜度O(1)50.網易有道筆試(sorry,與第39題反復):1.求一個二叉樹中任意兩個節(jié)點間的最大距離,兩個節(jié)點的距離的定義是這兩個節(jié)點間邊的個數(shù),比如某個孩子節(jié)點和父節(jié)點間的距離是1,和相鄰兄弟節(jié)點間的距離是2,優(yōu)化時間空間復雜度。2.求一個有向連通圖的割點,割點的定義是,假如除去此節(jié)點和與其相關的邊,有向圖不再連通,描述算法。-------------------------------------------------------------------51.和為n連續(xù)正數(shù)序列(數(shù)組)。題目:輸入一個正數(shù)n,輸出所有和為n連續(xù)正數(shù)序列。例如輸入15,由于1+2+3+4+5=4+5+6=7+8=15,所以輸出3個連續(xù)序列1-5、4-6和7-8。分析:這是網易的一道面試題。52.二元樹的深度(樹)。題目:輸入一棵二元樹的根結點,求該樹的深度。從根結點到葉結點依次通過的結點(含根、葉結點)形成樹的一條途徑,最長途徑的長度為樹的深度。例如:輸入二元樹:10//614///41216輸出該樹的深度3。二元樹的結點定義如下:structSBinaryTreeNode//anodeofthebinarytree{intm_nValue;//valueofnodeSBinaryTreeNode*m_pLeft;//leftchildofnodeSBinaryTreeNode*m_pRight;//rightchildofnode};分析:這道題本質上還是考察二元樹的遍歷。53.字符串的排列(字符串)。題目:輸入一個字符串,打印出該字符串中字符的所有排列。例如輸入字符串abc,則輸出由字符a、b、c所能排列出來的所有字符串abc、acb、bac、bca、cab和cba。分析:這是一道很好的考核對遞歸理解的編程題,因此在過去一年中頻繁出現(xiàn)在各大公司的面試、筆試題中。54.調整數(shù)組順序使奇數(shù)位于偶數(shù)前面(數(shù)組)。題目:輸入一個整數(shù)數(shù)組,調整數(shù)組中數(shù)字的順序,使得所有奇數(shù)位于數(shù)組的前半部分,所有偶數(shù)位于數(shù)組的后半部分。規(guī)定期間復雜度為O(n)。55.(語法)題目:類CMyString的聲明如下:classCMyString{public:CMyString(char*pData=NULL);CMyString(constCMyString&str);~CMyString(void);CMyString&operator=(constCMyString&str);private:char*m_pData;};請實現(xiàn)其賦值運算符的重載函數(shù),規(guī)定異常安全,即當對一個對象進行賦值時發(fā)生異常,對象的狀態(tài)不能改變。56.最長公共字串(算法、字符串)。題目:假如字符串一的所有字符按其在字符串中的順序出現(xiàn)在此外一個字符串二中,則字符串一稱之為字符串二的子串。注意,并不規(guī)定子串(字符串一)的字符必須連續(xù)出現(xiàn)在字符串二中。請編寫一個函數(shù),輸入兩個字符串,求它們的最長公共子串,并打印出最長公共子串。例如:輸入兩個字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它們的最長公共子串,則輸出它們的長度4,并打印任意一個子串。分析:求最長公共子串(LongestCommonSubsequence,LCS)是一道非常經典的動態(tài)規(guī)劃題,因此一些重視算法的公司像MicroStrategy都把它當作面試題。57.用倆個棧實現(xiàn)隊列(棧、隊列)。題目:某隊列的聲明如下:template<typenameT>classCQueue{public:CQueue(){}~CQueue(){}voidappendTail(constT&node);//appendaelementtotailvoiddeleteHead();//removeaelementfromheadprivate:T>m_stack1;T>m_stack2;};分析:從上面的類的聲明中,我們發(fā)現(xiàn)在隊列中有兩個棧。因此這道題實質上是規(guī)定我們用兩個棧來實現(xiàn)一個隊列。相信大家對棧和隊列的基本性質都非常了解了:棧是一種后入先出的數(shù)據容器,因此對隊列進行的插入和刪除操作都是在棧頂上進行;隊列是一種先入先出的數(shù)據容器,我們總是把新元素插入到隊列的尾部,而從隊列的頭部刪除元素。58.從尾到頭輸出鏈表(鏈表)。題目:輸入一個鏈表的頭結點,從尾到頭反過來輸出每個結點的值。鏈表結點定義如下:structListNode{intm_nKey;ListNode*m_pNext;};分析:這是一道很故意思的面試題。該題以及它的變體經常出現(xiàn)在各大公司的面試、筆試題中。59.不能被繼承的類(語法)。題目:用C++設計一個不能被繼承的類。分析:這是Adobe公司2023年校園招聘的最新筆試題。這道題除了考察應聘者的C++基本功底外,還能考察反映能力,是一道很好的題目。60.在O(1)時間內刪除鏈表結點(鏈表、算法)。題目:給定鏈表的頭指針和一個結點指針,在O(1)時間刪除該結點。鏈表結點的定義如下:structListNode{intm_nKey;ListNode*m_pNext;};函數(shù)的聲明如下:voidDeleteNode(ListNode*pListHead,ListNode*pToBeDeleted);分析:這是一道廣為流傳的Google面試題,能有效考察我們的編程基本功,還能考察我們的反映速度,更重要的是,還能考察我們對時間復雜度的理解。-------------------------------------------------------------------------61.找出數(shù)組中兩個只出現(xiàn)一次的數(shù)字(數(shù)組)題目:一個整型數(shù)組里除了兩個數(shù)字之外,其他的數(shù)字都出現(xiàn)了兩次。請寫程序找出這兩個只出現(xiàn)一次的數(shù)字。規(guī)定期間復雜度是O(n),空間復雜度是O(1)。分析:這是一道很新奇的關于位運算的面試題。62.找出鏈表的第一個公共結點(鏈表)。題目:兩個單向鏈表,找出它們的第一個公共結點。鏈表的結點定義為:structListNode{intm_nKey;ListNode*m_pNext;};分析:這是一道微軟的面試題。微軟非常喜歡與鏈表相關的題目,因此在微軟的面試題中,鏈表出現(xiàn)的概率相稱高。63.在字符串中刪除特定的字符(字符串)。題目:輸入兩個字符串,從第一字符串中刪除第二個字符串中所有的字符。例如,輸入”Theyarestudents.”和”aeiou”,則刪除之后的第一個字符串變成”Thyrstdnts.”。分析:這是一道微軟面試題。在微軟的常見面試題中,與字符串相關的題目占了很大的一部分,由于寫程序操作字符串能很好的反映我們的編程基本功。64.尋找丑數(shù)(運算)。題目:我們把只包含因子2、3和5的數(shù)稱作丑數(shù)(UglyNumber)。例如6、8都是丑數(shù),但14不是,由于它包含因子7。習慣上我們把1當做是第一個丑數(shù)。求按從小到大的順序的第1500個丑數(shù)。分析:這是一道在網絡上廣為流傳的面試題,據說google曾經采用過這道題。65.輸出1到最大的N位數(shù)(運算)題目:輸入數(shù)字n,按順序輸出從1最大的n位10進制數(shù)。比如輸入3,則輸出1、2、3一直到最大的3位數(shù)即999。分析:這是一道很故意思的題目??雌饋砗芎啒?,其實里面卻有不少的玄機。66.顛倒棧(棧)。題目:用遞歸顛倒一個棧。例如輸入棧{1,2,3,4,5},1在棧頂。顛倒之后的棧為{5,4,3,2,1},5處在棧頂。67.倆個閑玩娛樂(運算)。1.撲克牌的順子從撲克牌中隨機抽5張牌,判斷是不是一個順子,即這5張牌是不是連續(xù)的。2-10為數(shù)字自身,A為1,J為11,Q為12,K為13,而大小王可以當作任意數(shù)字。2.n個骰子的點數(shù)。把n個骰子扔在地上,所有骰子朝上一面的點數(shù)之和為S。輸入n,打印出S的所有也許的值出現(xiàn)的概率。68.把數(shù)組排成最小的數(shù)(數(shù)組、算法)。題目:輸入一個正整數(shù)數(shù)組,將它們連接起來排成一個數(shù),輸出能排出的所有數(shù)字中最小的一個。例如輸入數(shù)組{32,321},則輸出這兩個能排成的最小數(shù)字32132。請給出解決問題的算法,并證明該算法。分析:這是20236月份百度的一道面試題,從這道題我們可以看出百度相應聘者在算法方面有很高的規(guī)定。69.旋轉數(shù)組中的最小元素(數(shù)組、算法)。題目:把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉。輸入一個排好序的數(shù)組的一個旋轉,輸出旋轉數(shù)組的最小元素。例如數(shù)組{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該數(shù)組的最小值為1。分析:這道題最直觀的解法并不難。從頭到尾遍歷數(shù)組一次,就能找出最小的元素,時間復雜度顯然是O(N)。但這個思緒沒有運用輸入數(shù)組的特性,我們應當能找到更好的解法。70.給出一個函數(shù)來輸出一個字符串的所有排列(經典字符串問題)。ANSWER簡樸的回溯就可以實現(xiàn)了。當然排列的產生也有很多種算法,去看看組合數(shù)學,尚有逆序生成排列和一些不需要遞歸生成排列的方法。印象中Knuth的<TAOCP>第一卷里面進一步講了排列的生成。這些算法的理解需要一定的數(shù)學功底,也需要一定的靈感,有愛好最佳看看。71.數(shù)值的整數(shù)次方(數(shù)字、運算)。題目:實現(xiàn)函數(shù)doublePower(doublebase,intexponent),求base的exponent次方。不需要考慮溢出。分析:這是一道看起來很簡樸的問題。也許有不少的人在看到題目后30秒寫出如下的代碼:doublePower(doublebase,intexponent){doubleresult=1.0;for(inti=1;i<=exponent;++i)result*=base;returnresult;}72.(語法)題目:設計一個類,我們只能生成該類的一個實例。分析:只能生成一個實例的類是實現(xiàn)了Singleton模式的類型。73.對稱字符串的最大長度(字符串)。題目:輸入一個字符串,輸出該字符串中對稱的子字符串的最大長度。比如輸入字符串“google”,由于該字符串里最長的對稱子字符串是“goog”,因此輸出4。分析:也許很多人都寫過判斷一個字符串是不是對稱的函數(shù),這個題目可以當作是該函數(shù)的加強版。74.數(shù)組中超過出現(xiàn)次數(shù)超過一半的數(shù)字(數(shù)組)題目:數(shù)組中有一個數(shù)字出現(xiàn)的次數(shù)超過了數(shù)組長度的一半,找出這個數(shù)字。分析:這是一道廣為流傳的面試題,涉及百度、微軟和Google在內的多家公司都曾經采用過這個題目。要幾十分鐘的時間里很好地解答這道題,除了較好的編程能力之外,還需要較快的反映和較強的邏輯思維能力。75.二叉樹兩個結點的最低共同父結點(樹)題目:二叉樹的結點定義如下:structTreeNode{intm_nvalue;TreeNode*m_pLeft;TreeNode*m_pRight;};輸入二叉樹中的兩個結點,輸出這兩個結點在數(shù)中最低的共同父結點。分析:求數(shù)中兩個結點的最低共同結點是面試中經常出現(xiàn)的一個問題。這個問題至少有兩個變種。76.復雜鏈表的復制(鏈表、算法)題目:有一個復雜鏈表,其結點除了有一個m_pNext指針指向下一個結點外,尚有一個m_pSibling指向鏈表中的任一結點或者NULL。其結點的C++定義如下:structComplexNode{intm_nValue;ComplexNode*m_pNext;ComplexNode*m_pSibling;};下圖是一個具有5個結點的該類型復雜鏈表。圖中實線箭頭表達m_pNext指針,虛線箭頭表達m_pSibling指針。為簡樸起見,指向NULL的指針沒有畫出。請完畢函數(shù)ComplexNode*Clone(ComplexNode*pHead),以復制一個復雜鏈表。分析:在常見的數(shù)據結構上稍加變化,這是一種很新奇的面試題。要在不到一個小時的時間里解決這種類型的題目,我們需要較快的反映能力,對數(shù)據結構透徹的理解以及扎實的編程功底。77.關于鏈表問題的面試題目如下(鏈表):1.給定單鏈表,檢測是否有環(huán)。使用兩個指針p1,p2從鏈表頭開始遍歷,p1每次前進一步,p2每次前進兩步。假如p2到達鏈表尾部,說明無環(huán),否則p1、p2必然會在某個時刻相遇(p1==p2),從而檢測到鏈表中有環(huán)。2.給定兩個單鏈表(head1,head2),檢測兩個鏈表是否有交點,假如有返回第一個交點。假如head1==head2,那么顯然相交,直接返回head1。否則,分別從head1,head2開始遍歷兩個鏈表獲得其長度len1與len2,假設len1>=len2,那么指針p1由head1開始向后移動len1-len2步,指針p2=head2,下面p1、p2每次向后前進一步并比較p1p2是否相等,假如相等即返回該結點,否則說明兩個鏈表沒有交點。3.給定單鏈表(head),假如有環(huán)的話請返回從頭結點進入環(huán)的第一個節(jié)點。運用題一,我們可以檢查鏈表中是否有環(huán)。假如有環(huán),那么p1p2重合點p必然在環(huán)中。從p點斷開環(huán),方法為:p1=p,p2=p->next,p->next=NULL。此時,原單鏈表可以看作兩條單鏈表,一條從head開始,另一條從p2開始,于是運用題二的方法,我們找到它們的第一個交點即為所求。4.只給定單鏈表中某個結點p(并非最后一個結點,即p->next!=NULL)指針,刪除該結點。辦法很簡樸,一方面是放p中數(shù)據,然后將p->next的數(shù)據copy入p中,接下來刪除p->next即可。5.只給定單鏈表中某個結點p(非空結點),在p前面插入一個結點。辦法與前者類似,一方面分派一個結點q,將q插入在p后,接下來將p中的數(shù)據copy入q中,然后再將要插入的數(shù)據記錄在p中。78.鏈表和數(shù)組的區(qū)別在哪里(鏈表、數(shù)組)?分析:重要在基本概念上的理解。但是最佳能考慮的全面一點,現(xiàn)在公司招人的競爭也許就在細節(jié)上產生,誰比較仔細,誰獲勝的機會就大。79.(鏈表、字符串)1.編寫實現(xiàn)鏈表排序的一種算法。說明為什么你會選擇用這樣的方法?2.編寫實現(xiàn)數(shù)組排序的一種算法。說明為什么你會選擇用這樣的方法?3.請編寫能直接實現(xiàn)strstr()函數(shù)功能的代碼。80.阿里巴巴一道筆試題(運算、算法)問題描述:12個高矮不同的人,排成兩排,每排必須是從矮到高排列,并且第二排比相應的第一排的人高,問排列方式有多少種?這個筆試題,很YD,由于把某個遞歸關系隱藏得很深。先來幾組百度的面試題:===================81.第1組百度面試題1.一個int數(shù)組,里面數(shù)據無任何限制,規(guī)定求出所有這樣的數(shù)a[i],其左邊的數(shù)都小于等于它,右邊的數(shù)都大于等于它。能否只用一個額外數(shù)組和少量其它空間實現(xiàn)。2.一個文獻,內含一千萬行字符串,每個字符串在1K以內,規(guī)定找出所有相反的串對,如abc和cba。3.STL的set用什么實現(xiàn)的?為什么不用hash?82.第2組百度面試題1.給出兩個集合A和B,其中集合A={name},集合B={age、sex、scholarship、address、...},規(guī)定:問題1、根據集合A中的name查詢出集合B中相應的屬性信息;問題2、根據集合B中的屬性信息(單個屬性,如age<20等),查詢出集合A中相應的name。2.給出一個文獻,里面包含兩個字段{url、size},即url為網址,size為相應網址訪問的次數(shù),規(guī)定:問題1、運用LinuxShell命令或自己設計算法,查詢出url字符串中包含“baidu”子字符串相應的size字段值;問題2、根據問題1的查詢結果,對其按照size由大到小的排列。(說明:url數(shù)據量很大,100億級以上)83.第3組百度面試題1.今年百度的一道題目百度筆試:給定一個存放整數(shù)的數(shù)組,重新排列數(shù)組使得數(shù)組左邊為奇數(shù),右邊為偶數(shù)。規(guī)定:空間復雜度O(1),時間復雜度為O(n)。2.百度筆試題用C語言實現(xiàn)函數(shù)void*memmove(void*dest,constvoid*src,size_tn)。memmove函數(shù)的功能是拷貝src所指的內存內容前n個字節(jié)到dest所指的地址上。分析:由于可以把任何類型的指針賦給void類型的指針這個函數(shù)重要是實現(xiàn)各種數(shù)據類型的拷貝。84.第4組百度面試題2023年3道百度面試題[相信,你懂其中的含金量]1.a~z涉及大小寫與0~9組成的N個數(shù)用最快的方式把其中反復的元素挑出來。2.已知一隨機發(fā)生器,產生0的概率是p,產生1的概率是1-p,現(xiàn)在要你構造一個發(fā)生器,使得它構造0和1的概率均為1/2;構造一個發(fā)生器,使得它構造1、2、3的概率均為1/3;...,構造一個發(fā)生器,使得它構造1、2、3、...n的概率均為1/n,規(guī)定復雜度最低。3.有10個文獻,每個文獻1G,每個文獻的每一行都存放的是用戶的query,每個文獻的query都也許反復。規(guī)定按照query的頻度排序.85.又見字符串的問題1.給出一個函數(shù)來復制兩個字符串A和B。字符串A的后幾個字節(jié)和字符串B的前幾個字節(jié)重疊。分析:記住,這種題目往往就是考你對邊界的考慮情況。2.已知一個字符串,比如asderwsde,尋找其中的一個子字符串比如sde的個數(shù),假如沒有返回0,有的話返回子字符串的個數(shù)。86.如何編寫一個程序,把一個有序整數(shù)數(shù)組放到二叉樹中?分析:本題考察二叉搜索樹的建樹方法,簡樸的遞歸結構。關于樹的算法設計一定要聯(lián)想到遞歸,由于樹自身就是遞歸的定義。而,學會把遞歸改稱非遞歸也是一種必要的技術。畢竟,遞歸會導致棧溢出,關于系統(tǒng)底層的程序中不到非不得以最佳不要用。但是對某些數(shù)學問題,就一定要學會用遞歸去解決。87.1.大整數(shù)數(shù)相乘的問題。(這是2023年在一考研班上碰到的算法題)2.求最大連續(xù)遞增數(shù)字串(如“ads3sl456789DF3456ld345AA”中的“456789”)3.實現(xiàn)strstr功能,即在父串中尋找子串初次出現(xiàn)的位置。(筆試中常讓面試者實現(xiàn)標準庫中的一些函數(shù))88.2023年11月金山筆試題。編碼完畢下面的解決函數(shù)。函數(shù)將字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改變非'*'字符的先后順序,函數(shù)返回串中字符'*'的數(shù)量。如原始串為:ab**cd**e*12,解決后為*****abcde12,函數(shù)并返回值為5。(規(guī)定使用盡量少的時間和輔助空間)89.神州數(shù)碼、華為、東軟筆試題1.2023年11月15日華為軟件研發(fā)筆試題。實現(xiàn)一單鏈表的逆轉。2.編碼實現(xiàn)字符串轉整型的函數(shù)(實現(xiàn)函數(shù)atoi的功能),據說是神州數(shù)碼筆試題。如將字符串”+123”123,”-0123”-123,“123CS45”123,“123.45CS”123,“CS123.45”03.快速排序(東軟喜歡考類似的算法填空題,又如堆排序的算法等)4.刪除字符串中的數(shù)字并壓縮字符串。如字符串”abc123de4fg56”解決后變?yōu)椤盿bcdefg”。注意空間和效率。(下面的算法只需要一次遍歷,不需要開辟新空間,時間復雜度為O(N))5.求兩個串中的第一個最長子串(神州數(shù)碼以前試題)。如"abractyeyt","dgdsaeactyey"的最大子串為"actyet"。90.1.不開辟用于互換數(shù)據的臨時空間,如何完畢字符串的逆序(在技術一輪面試中,有些面試官會這樣問)。2.刪除串中指定的字符(做此題時,千萬不要開辟新空間,否則面試官也許認為你不適合做嵌入式開發(fā))3.判斷單鏈表中是否存在環(huán)。91.1.一道著名的毒酒問題有1000桶酒,其中1桶有毒。而一旦吃了,毒性會在1周后發(fā)作?,F(xiàn)在我們用小老鼠做實驗,要在1周內找出那桶毒酒,問最少需要多少老鼠。2.有趣的石頭問題有一堆1萬個石頭和1萬個木頭,對于每個石頭都有1個木頭和它重量同樣,把配對的石頭和木頭找出來。92.1.多人排成一個隊列,我們認為從低到高是對的的序列,但是總有部分人不遵守秩序。假如說,前面的人比后面的人高(兩人身高同樣認為是合適的),那么我們就認為這兩個人是一對“搗亂分子”,比如說,現(xiàn)在存在一個序列:176,178,180,170,171這些搗亂分子對為<176,170>,<176,171>,<178,170>,<178,171>,<180,170>,<180,171>,那么,現(xiàn)在給出一個整型序列,請找出這些搗亂分子對的個數(shù)(僅給出搗亂分子對的數(shù)目即可,不用品體的對)規(guī)定:輸入:為一個文獻(in),文獻的每一行為一個序列。序列全為數(shù)字,數(shù)字間用”,”分隔。輸出:為一個文獻(out),每行為一個數(shù)字,表達搗亂分子的對數(shù)。具體說明自己的解題思緒,說明自己實現(xiàn)的一些關鍵點。并給出實現(xiàn)的代碼,并分析時間復雜度。限制:輸入每行的最大數(shù)字個數(shù)為100000個,數(shù)字最長為6位。程序無內存使用限制。93.在一個int數(shù)組里查找這樣的數(shù),它大于等于左側所有數(shù),小于等于右側所有數(shù)。直觀想法是用兩個數(shù)組a、b。a[i]、b[i]分別保存從前到i的最大的數(shù)和從后到i的最小的數(shù),一個解答:這需要兩次遍歷,然后再遍歷一次原數(shù)組,將所有data[i]>=a[i-1]&&da
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度服裝設計委托創(chuàng)作合同
- 感恩課程課件教學課件
- 2024年度互聯(lián)網金融與投資合同
- 2024年城市供水供電管網改造工程合同
- 2024年度電子商務平臺服務外包合同
- 2024年度智能家居產品購銷合同
- 2024年屋產交易合同:個人賣家與買家之間的協(xié)議
- 2024年度光伏發(fā)電項目建設與運營合同
- 大學民法課件教學課件
- 公司中秋節(jié)員工的慰問信(18篇)
- 高考數(shù)學小題狂練:每題都附有詳細解析
- 浮動碼頭施工方案
- Poka-Yoke防錯技術(完整版)
- 保安交接班記錄表(2)
- 神明—EZflame火焰檢測系統(tǒng)
- 個人簡歷求職簡歷課件.ppt
- 2018年江蘇高考滿分作文:在母語的屋檐下
- 新青島版五四制2021-2022四年級科學上冊實驗指導
- 小學四年級音樂課程標準
- 雙向細目表和單元測試卷及組卷說明
- 離子色譜法測定空氣中二氧化硫
評論
0/150
提交評論