1.寫出c語言中memcopy和memmove的實現
2.寫出二路歸併排序。
3.給定乙個陣列a[n],求其中n-1個數相乘最大的是多少,不准用除法。
4.針對剛才寫出的第三題的函式設計測試用例。
5.給定兩個有序的陣列,長度分別為m和n,求這兩個陣列中的第k個元素。
1.memcopy和memmove實現。
這裡給出乙個比較標準的實現。
2.二路歸併。基本排序。但是要一次寫對也不容易。
3.如果不考慮複雜度的話。想法就是分段連乘。
由於它是每次少乙個元素。如果少的是第m個元素。我們將[0..m-1]和[m+1,len-1]分別做連乘。最後再將倆部分乘起來。這樣複雜度較高。
4.測試用例。不會
5.這道題是比較難的。一般想法都是一次歸併,借助k的空間。k次比較後結束。但是一旦要求複雜度為log(k),空間複雜度為o(1)就變得很難
這裡給出網上的解法
問題分析:
1. 把 a 平均分為前後兩個部分,前部分有 x 個元素,後部分有 n-x 個元素(由於 a 是有序的,所以後一部分的所有元素都大於前一部分)。a[x] 為 a 的後一部分中的第乙個元素。
2. 同理把 b 也平均分成前後兩個部分,前部分有 y 個元素,後部分有 m-y 個元素。b[y] 是 b 的後一部分中的第乙個元素。
3. 由於兩個陣列都是被平均分割的,所以可以近似地認為 x = n/2, y = m/2。這裡不妨設 a[x] <= b[y](如果 a[x] > b[y] 處理過程和下面類似):
情況1:
由於在 a 中,a[x] 前面有 x 個元素,在 b 中,b[y] 前面有 y 個元素,並且又有 a[x] <= b[y],那麼,合併以後,a[x]前面原來那些元素必然也在b[y]前面。也就是說,b[y]前面至少會有 x + y 個元素,我們再規定如果 a, b 中有相同元素,則合併後 a 中的元素排在 b 前面,那麼歸併以後 a[x] 也會排在 b[y] 前面,於是,合併之後 b[y] 至少有 x+y+1 個元素。
如果 k <= x+y+1,也就是說,合併後第 k 個元素必然落在 b[y] 前面。所以,原來在 b 陣列中的後一部分(b[y]以及 b[y] 之後)那些元素都不可能包含我們要找到內容(第 k 大元素),所以我們可以把他們排除掉。這樣就排除了 b 中一半的內容。
情況2:
在 a 中,a[x] 及其後面有 n-x 個元素,除去 a[x] 之後有 n-x-1 個元素,b[y] 及其後面有 m-y 個元素。那麼,由於 a[x] <= b[y],所以合併起來之後,b[y] 後面那些元素必然也在 a[x] 後面,則合併後 a[x] 後面至少有(n-x-1) + (m-y) = (n+m)-(x+y+1) 個元素。
如果 k > x+y+1,也就說,合併後第 k 大的元素必然落在 a[x] 後面。所以,原來在 a 陣列中,第一部分(a[x]之前)以及 a[x] 都不可能包含我們要找的元素,所以我們可以把他們排除掉。這樣就排除了 a 中一半的內容。
總結:
綜上所述,對於 k <= x+y+1 還是 k > x+y+1 我們都提出了解決的方案,並且每種方案都能把 a 或者 b 的規模減小一半。減小了一半之後,我們將其作為乙個新的問題繼續使用上面的演算法處理,直到 a 或者 b 減小到足夠小:
a 沒有了,這樣只需要找出 b 中第 k 大的元素,也就是 b[k]。
b 沒有了,同上結果就是 a[k]。
public class numx else
} public static void main(string args) ;
n.b = new int ;
system.out.println(n.find(0, 2, 0, 2, 3));
} }
百度二面記錄
自我介紹,老生常談了 就自己專案介紹下 大概和一面差不多的 資料結構和演算法 常用幾種排序方法說一下,比較下優劣 評判指標 時間複雜度,空間複雜度,穩定性 把幾種排序演算法的空間複雜度說一下 堆和棧的區別 分別儲存什麼變數 題 二叉樹查詢兩個節點的公共父節點 蛇形矩陣查詢給定座標的值 計算機網路 有...
百度一面 二面 總結
首先自我介紹 1 專案 專案背景 技術 架構 為什麼做這兩個專案 專案實現了什麼?專案問的比較細 問了好多,優化呀,改進呀,借助第三方模組幹了啥?具體 具體 再具體,當時怎麼想的 怎麼設計的 進行測試沒?能實現多強的功能?2 問我雜湊,雜湊衝突,雜湊的底層實現,雜湊衝突的處理辦法,有幾種方法,每種方...
百度移動搜尋測試電面
然後我說沒有做過專案,沒有專案經驗,然後就告訴他我其實大學期間一直在搞acm比賽。2 然後說我的技能方面都有哪些?然後就照著我的簡歷念了一遍 3 問我c 中堆記憶體和棧記憶體的區別 其實早好剛好看過,然後剛開始有點緊張了,說話也有點發抖 我說棧記憶體的話就是一些區域性變數或者函式用的,比較快,然後執...