騰訊實習生筆試面試總結 2

2022-03-21 06:55:55 字數 2279 閱讀 6479

二分查詢大家都很熟悉,但如果給出的陣列a可能進行了迴圈移位,如[1 2 3 4]變成了[2 3 4 1](是否移位,移了多少位都不知道),能否寫乙個程式,快速找出陣列中是否存在某元素n我最初的想法是,遍歷陣列,找出移位的點,然後判斷n屬於哪個區間,進而在那個區間中對n進行二分查詢。

但是面試官提示我,原本二分查詢的時間複雜度是o(lgn),而遍歷陣列的時間複雜度是o(n),時間複雜度增加太多,能不能找到乙個不改變時間複雜度的演算法。

思考之後我發現,查詢移位點其實可以用二分查詢來實現,這樣整體時間複雜度就不會增加了。移位點s的特徵是:在它左邊的元素比在它右邊的元素大。可以用以下方法找到移位點:區間的頭為b,尾為e,中間點為m;若a[b]<=a[e],那麼該區間中不存在移位點。若a[b]>a[m],則移位點在該區間的左半段;若a[m]>a[e],則移位點在該區間的右半段。

回家後我再思考這個問題,發現上面的方法可以更簡化,那就是把判斷移位點和查詢元素n的過程結合在一起。

對於一段區間be,中間點為m。若a[b]

1 

2 3

4 5

6 7

8 9

10 11

12 13

14 15

16 17

18 19

20 21

22 23

24 25

26 27

28 29

30 31

32 33

34 35

36 37

38 39

40 41

42 43

44 45

46 47

48 49

50 51

52 53

54 55

int

binsearch

(int

*a,

intlen,

intn)

else

if(a[m]

<=

a[e])

// 移位點在bm區間中

}else

// be區間中不存在移位點,直接用二分查詢m =

(b +

e) /2;

}return-1

;}

這道題包括和面試官討論及寫出**,總共花了快乙個小時,它給我的感觸是,對於陌生的演算法,最好的辦法是先把思路用偽**寫出來,寫的時候不考慮條件怎樣成立、邊界處理等細節,確定了整體思路後,再寫出**並考慮細節問題。在寫**的時候,需要注意考慮特殊情況:陣列為空,陣列中只有乙個元素,陣列中只有兩個元素,陣列中元素都一樣,要增加、刪除或查詢的是首尾元素等。

已知乙個單向鍵表,但不知道它的頭指標,給出鍊錶中乙個節點的指標,並且已知該結點的後續節點不為空,要求刪除該結點這個題咋看之下無從入手,因為不知道頭指標,就無法獲得那個節點的前置節點。這時候就得打破常規的思維了,刪除乙個節點,其實就是讓它的後續節點取代它。

1 

2 3

node 

*temp =p

->

next;

memcpy

(p, temp,

sizeof

(node));

free

(temp);

怎麼確定記憶體中棧的生長方向考察對程式記憶體分配的理解。記憶體中棧主要用來存放區域性變數、函式引數、返回值等。

我的回答是,定義兩個變數a和b,列印出它們的位址,看看是增大還是減小。在這裡我犯了乙個錯誤,認為先定義的變數先分配記憶體,其實這是不能保證的。

正確的做法是,定義兩個函式a和b,a列印出它的引數的位址並呼叫b,b列印出它的引數的位址,根據位址的增大或是減少來判斷。

hr面試就是和你聊聊天,問一些你的基本情況,感覺主要在考察你實習的意願。我的經驗是要表現出強烈的想去的慾望,而且最好事先了解一下公司的背景,另外,問能夠實習多久時往長了說,反正這並不是最終確定實習長度的時候,並且能夠實習更久會給你有加分。

實習的目的

你的缺點

同學眼中的你是什麼樣子的

同學有過的關於你的最負面的評價

總的來說,筆試面試過程拖得並不久,一次筆試加三次面試在乙個星期內完成。但是之後的等待過程卻是很漫長,乙個多星期之後才收到offer(期間我甚至懷疑是不是沒通過hr面試--。),而由於要全國統一進行,所以直到現在還在等待實習流程的繼續。不過等待也沒有什麼不好,這次應聘給了我很多收穫,也暴露出我的很多問題,這等待給了我時間去思考去總結,讓我成長。

騰訊實習生筆試題

一 單項選擇題 1 給定3個int型別的正整數x,y,z,對如下4組表示式判斷正確的選項 int a1 x y z int b1 x y z int a2 x z y int b2 x z y int c1 x z int d1 x y z int c2 x z a a1一定等於a2 b b1一定定...

2012騰訊實習生筆試題

問題描述 兩個陣列a n b n 其中a n 的各個元素值已知,現給b i 賦值,b i a 0 a 1 a 2 a n 1 a i 要求 1.不准用除法運算2.除了迴圈計數值,a n b n 外,不准再用其他任何變數 包括區域性變數,全域性變數等 3.滿足時間複雜度o n 空間複雜度o 1 分析 ...

騰訊實習生筆試題20160305

include include void fun int main 程式執行結果為 2 3 說明在第二次呼叫fun 函式時,a的值為2,並且沒有進行初始化賦值,直接進行自增運算,所以得到的結果為3.對於靜態區域性變數如果沒有進行初始化的話,對於整形變數系統會自動對其賦值為0,對於字元陣列,會自動賦值...