心得 面試題分析與整理2

2021-07-23 10:02:47 字數 2064 閱讀 7408

繼續

5.單鏈表反轉,字串反轉

typedef struct node *nodelink;

struct node

;void reversesiglelink(nodelink head)

}

字串反轉比這個要簡單一些,原因是字串可以直接按位置進行索引。

#include 

void myswap(char *ch1, char *ch2)

void reversestr(char *str, int n)

}int main()

這個題還引申出乙個題,就是把字串按某個字元進行反轉。

比如,

hello c.hello c++..

期望的反轉結果是:

..hello c++.hello c

實際的思路就是再多想一層,既然整體可以做反轉,那麼區域性也可以做反轉。

先區域性反轉分隔符之外的字元,然後再對整體做一次反轉,應該可以得到結果。原來的反轉函式稍作改造,支援按區間做反轉。

#include 

void myswap(char *ch1, char *ch2)

void reversestr(char *str, int left, int right)

}int main()

if(str[i]!='.' && str[i+1]=='.')

if(start//printf("start=%d, end=%d\n",start, end);

reversestr(str, start, end+1);

//printf("after partial reverse: %s\n", str);

start = end;}}

reversestr(str, 0, str_len);

printf("actual output is: %s\n", str);

return

0;}

第2段換序列時有點小坑,就是offset要仔細分析。

6.確定兩個單鏈表有共同的部分

這個問題可以演化成判斷樹有共同祖先的問題,也是面試書上的原題。

基本思路,都往後走,若有共同部分,必然在鍊錶的某個位置會合,如果到尾結點還沒會合,那就是沒有共同部分,因此這題本質上還是乙個單鏈表的遍歷問題。

程式設計之美233頁

#include 

using

namespace

std;

typedef

struct node *nodelink;

struct node

;nodelink findnode(nodelink a, nodelink b);

nodelink gettail(nodelink head);

int main()

nodelink findnode(nodelink a, nodelink b)

nodelink gettail(nodelink head)

7.判斷乙個ip是乙個合法的ip

這個題目本質上是乙個字串遍歷的問題。解出一段ip,然判斷其值是不是合法,當4段ip值都合法,那就是乙個合法的ip。

這個問題還有乙個引申問法,就是判斷兩個ip是不是在同乙個網段。這個問題本質是考察ip知識,編碼倒不是重點。你得知道怎麼判斷ip,ip和掩碼位與結果相同,那才是兩個相同的網段。

具體**略

8.shell排序

這個問題當時被面過,冒泡,選擇,插入,快排,堆排,甚至連最複雜的歸排都準備了,唯獨希爾排序被問了。希爾排序是用步長控制的插入排序,通過加大插入排序的間隔,讓資料大幅移動,時間複雜度nlogn。

還是來段**說話:

void shell_sort(int *a, int n)

{ int h,j,k,t;

for(h=n/2;h>0;h=h/2)

{t = a[j];

for(k=j-h;(k>=0)&&t寫起來簡單,比快排避開了堆疊呼叫。

心得 面試題分析與整理5

17.已知乙個亂序整數陣列 求該陣列排序相鄰兩數的最大間隔 要求時間複雜度為o n 時間複雜度的要求基本把先排序的方法濾掉了。思路如下 先遍歷一遍找出最大,最小,設定gap max min n,設立k個桶,記錄每個桶中最大最小值,然後順序比較各個桶的最大最小。這裡把遍歷一遍找最大最小示範一下,這個最...

java面試題整理(2)

一 註冊中心你了解了哪些?答 consul eureka zookeeper 二 jdk 中有哪幾個執行緒池?答 juc提供了排程器物件executors來建立執行緒池,可建立的執行緒池有四種 1 newfixedthreadpool建立乙個指定工作執行緒數量的執行緒池。每當提交乙個任務就建立乙個工...

面試題整理

2014.3.19日整理 1.建立一張表hack 裡面就乙個欄位num,然後用sql語句從1開始插入到100,怎麼寫?oracle 答 1.create tablehack num number 建表語句 2.begin for i in1.100loop insert intohack num v...