1 筆試題思路

2022-09-14 04:33:11 字數 3802 閱讀 2725

1. 合併兩個有序陣列到其中乙個陣列中

將乙個資料插入另外乙個資料尾部,然後排序 sort(a.begin(), a.end())。

雙指標法把兩個陣列中的資料存入乙個臨時陣列中,然後將臨時陣列中的值賦值給指定陣列。

2. 尋找鍊錶中間節點

快慢指標都指向head節點,慢指標前進乙個,快指標前進兩個。

3. 有序鍊錶或陣列轉換為平衡二叉樹,也就是中序遍歷陣列回覆為平衡二叉樹

尋找中間節點,然後採用遞迴回覆平衡二叉樹,建立中間節點的二叉節點,然後該節點的左孩子指向nums(low,mid-1),右孩子指向nums(mid+1,high)。

4. 判斷兩個string 是否是同構的

兩個字元對應位置的字元出現的位置相同

s.find(s[i]) != t.find(t[i]),find返回下標。

5. 比較兩個string型別的版本號大小

根據 . 分隔符來計算每一段的大小,然後比較大小,然後迴圈進行下一位的比較。

6.二分法求中間mid值

int mid = left + (right - left) / 2; // 防止計算時溢位

int mid = (right + left) / 2; // 如果right + left值超過intmax會出現錯

7. 兩數相乘可能大於intmax

強制型別轉換為long : long res = (long)mid*mid;

8.二分法在判斷大小後:

left = mid +1;

right = mid-1;

否則可能出出現恆left9. 陣列在求二分法時:為防止左邊界越界。

int left = 0;

int right = nums.size(); //有邊界為陣列長度,方便在陣列是偶數個數時的取值。

int mid = 0;

while(left <= right && left < nums.size())

10. 矩陣初始化乙個m*n大小的矩陣,二維陣列使用一定要先初始化

vector>v(m, vector(n));

11. 大頂堆 小頂堆

//公升序佇列 小頂堆 

priority_queue ,greater> q;

//降序佇列 大頂堆 預設大頂堆

priority_queue ,less>q;

常用的函式:push pop top empty

priority_queue> a; // pari型的資料,先比較第乙個元素,第乙個相等再比較第二個元素。第二個元素時q.top().second; 不是second();

17.  queueq

push(elem);		//從隊尾入對

pop(); //彈出隊頭元素

back(); //返回最後乙個元素

front(); //返回隊頭元素

12. vector賦值給vector

a.assign(b.begin(),b.end());

13.  求矩陣對角線是否相同:

matrix[i][j] == matrix[i-1][j-1]

14.歸併排序排序鍊錶

listnode* sortlist(listnode* head)

15. 整形轉string

string str = str +to_string(left->val);

16.樹遞迴時將需要「累積」的變數通過傳引用的方式依次往下傳遞即可。

比如尋找所有路徑,就將path 作為乙個變數再遞迴中呼叫,將結束的path再放到乙個全域性變數中,同乙個變數再不同的路徑下會有不同的值。

17. 樹的先序訪問:

迭代法:根左右,因為要先訪問左節點,考慮棧先進後出,需要先把右節點放進棧中。

對於多叉樹的訪問:

void preorder(node* root, vector&res)

}

18.判斷乙個樹是否是另外乙個棵樹的子樹,沒有很好的辦法,只能對主樹挨個節點與子樹對比。

19. 遍歷元素vector和string元素 :

string mostcommonword(string paragraph, vector& banned) 

}//unordered_set賦值操作: unordered_set s(str.begin(),str.end());

string str = "

hello";

string

cur;

for(char

c:str)

20.訊號量的使用:

class foo 

void first(functionprintfirst)

void second(functionprintsecond)

void third(functionprintthird)

}

21. mutex互斥鎖的使用:

交替列印,兩個物件可以各自加鎖,然後解對方的鎖。

class foobar 

void foo(functionprintfoo)

}void bar(functionprintbar)

}};

22. count統計string字串中字元的數量:

#include using namespace std;

int main()

;

26. sort(vec.begin(), vec.end()) 是從小到大排序的。

27. 座標兩點的距離:切比雪夫距離:簡而言之就是左邊兩點的距離(垂直水平和對角都算距離1),就是兩點形成的矩形的最長邊。

對於平面上的兩個點 x = (x0, y0) 和 y = (x1, y1),設它們橫座標距離之差為 dx = |x0 - x0|,縱座標距離之差為 dy = |y0 - y1|,對於以下三種情況,我們可以分別計算出從 x 移動到 y 的最少次數:

dx < dy:沿對角線移動 dx 次,再豎直移動 dy - dx 次,總計 dx + (dy - dx) = dy 次;

dx == dy:沿對角線移動 dx 次;

dx > dy:沿對角線移動 dy 次,再水平移動 dx - dy 次,總計 dy + (dx - dy) = dx 次。

可以發現,對於任意一種情況,從 x 移動到 y 的最少次數為 dx 和 dy 中的較大值 max(dx, dy),這也被稱作 x 和 y 之間的 切比雪夫距離。

由於題目要求,需要按照陣列**現的順序來訪問這些點。因此我們遍歷整個陣列,對於陣列中的相鄰兩個點,計算出它們的切比雪夫距離,所有的距離之和即為答案。

28. 有返回值的遞迴

class solution 

}

30. string 操作:char *strstr (const char *s1, const char *s2); //在s1中尋找s2,並返回指標

31. 羅馬數字轉整數,字元排序決定了是累加還是累減。

32. 字串反轉

string s="123456"; reverse(s.begin(),s.end());

33.

京東2016筆試題

我的結果,深度搜尋。考試當場小毛病沒改出來16 正確率 後來發現橫縱座標寫反了。醉了。以後再也不用xy做座標了,用row col的話就不會想歪了。include include using namespace std int dfs vector map,int x,int y,int max,in...

京東2016筆試題

2016.年4月8日7點到9點考題,兩個程式設計題,就做出這乙個了,第二個沒時間了,感覺第二個程式設計題還好,不是很難 題目大致意思就是給定乙個8 8的棋盤,給定兩個點a,b,求從a到b需要走的最短步數,並列印最短路徑。走的每一步的方向可以為左 l 右 r 上 u 下 d 左下 ld 左上 lu 右...

網易9 9筆試題

一 重排數列 判斷數列重排之後是否可以滿足a i a i 1 是4的倍數 想複雜了。也不用動態規劃,直接統計數中4的倍數,不是4的倍數偶數和奇數的個數就好了。滿足cnt2 0時,cnt4 cnt1 1 或者cnt2 0時,cnt4 cnt1 時就滿足,否則不滿足 include using name...