繼續
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...