百度筆試題10 2

2021-05-23 18:52:38 字數 3820 閱讀 4700

題目三:

http://topic.csdn.net/u/20071005/22/73ad4afd-35b8-4864-ab89-df45ceced7d6.html 簡述

:n個空間,存放

a到a+n-1的數,

位置隨機且數字不重

,a為正且未知.

現在第乙個空間的數被誤設定為

-1. 說明

:已經知道被修改的數不是最小的.

例子:n=6, a=2,

原始的串為

5, 3, 7, 6, 2, 4.

現在被別人修改為

-1, 3, 7, 6, 2, 4.

現在希望找到

5.

限制:n

不超過1m

,現在希望找出這個數

,並且實現盡量快.

要求:完成函式

(實現盡可能高效)

unsigned int find_lost(const int* source, const length)

source

為陣列起址

,length

為長度.

給出思路

(文字描述

),完成**

,並且分析你演算法的時間複雜度.

answer1:

(排序太耗時間)

拋磚引玉!!!首先排序,然後從第二個元素開始遍歷。第

i個元素值=第

i+1個元素值

-1,不滿足這個條件,即:得到被修改的值為: 第

i各元素值

+1。時間複雜度為

o(n)

。那麼因為要排序,所以時間為

o(nlogn)

answer2

思路:此題關鍵是

hash

函式h(x)

的設計,為了減少陣列遍歷次數,可把陣列看成環形, 設

h(x):

h(a[1])=1,

h(x)=(x-a[1]+1+n)%n x <>a[1]

**如下,複雜度為遍歷2次:

#include

#include

#include

#define h(x,a1,n) (x-a1+1+n)%n

unsigned int find_lost(const int* source, const length)

for(i=0;i

if (a[i]==0)

break;

} free(a);

return a[(i-1+length)%length]+1;

} void main() ;

cout <

system("pause");

}answer3

由題目可知陣列裡的數字是連續不重複的,所以前

n項和很容易求得。

遍歷整個陣列(從第二個開始,

-1不算),求出陣列的和

total

,順便求出最小值

min。結果就是

(min+min+length-1)*length/2-total.前n

項和減去前

n-1項和就是要找的那一項。

最小值沒有被改變保證了找到的最小值一定是正確的。如果數值很大可以採用

64位數o(∩

_∩)o。時間

o(n)

,空間o(1). 7

樓的,乙個

64位數存放1m的

32位整數和綽綽有餘。。。。。。

題目四:

任何乙個基於「比較」的內部排序的演算法,若對

6個元素進行排序,則在最壞情況下所需的比較次數至少為

____。a

.10b.

11c.

21d.36

answer1:

據嚴蔚敏資料結構,問題等價於給

n個不同的砝碼和一台天平要稱幾次能分辨它們的順序。 含

n個記錄的序列可能出現的初始狀態有

n!個,則描述

n個記錄排序過程的判定樹必有

n!個葉子節點,若有

n個葉子節點,則二叉樹的高度至少為

log 2 n

!,(2

為底)+ 1

,也即是說必然存在一條長為

log 2 n!

的路徑,求出來n為

任何乙個基於「比較」的內部排序的演算法,若對

5個元素進行排序,則在最壞情況下所需的比較次數至少為

(71)。

(71)a.7

b.8

c.21 d

.120

答案:(71)a

解析:對於

5個記錄的集合任何乙個基於「比較」的內部排序的演算法的判定樹的葉子結點數目為

5!,此判定樹的樹高至少為

log25!

。由5!=120

,2^7=128

,2^6=64

可得6 。因此在最壞情況下所需的比較次數至少為7。

題目五:

乙個自然數可以分解為若干個自然數相乘,對於指定自然數

n,請求出每種分解自然數之和最小的乙個。

說明:不考慮

1,若是素數,則是它本身。

例子:如

6=2*3,

或是它本身,則

2+3最小。

限制:無

要求:完成函式

unsigned int minsum(unsigned int n),n

為輸入自然數,返回最小的和。

給出思路分析

(文字描述

),完成**,並分析你演算法的時間複雜度和空間複雜度。

乙個自然數可以分解為若干個自然數相乘,求出每種分解自然數之和最少的乙個。

如12=2*2*3

,和為7=2+2+3

分析:如果把用窮舉法把所有可能的組合計算出來,那無疑是複雜的。

假設a=b*c

。其中b

,c>=2

。則a>=2*max>=a+b

。由此可見

a因數分解後的和比

a小。顯然

a的完全因數分解之後的和最小。問題就變成了自然數完全因數分解求和。

#include

unsigned int minsum(unsigned int n)

else

div_idx++; }

return sum+n; }

百度筆試題

一 選擇題 15分 共10題 1.在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是 a.shell排序 b.歸併排序 c.直接插入排序 d.選擇排序 2.以下多執行緒對int型變數x的操作,哪幾個需要進行同步 a.x y b.x c.x d.x 1 3.void func 中,變數val的記憶體...

百度筆試題

一 選擇題 15分 共10題 1.已知乙個線性表 38,25,74,63,52,48 採用的雜湊函式為hash key key mod 7,將元素雜湊到表長為7的雜湊表中儲存。請選擇後面兩種衝突解決方法分別應用在該雜湊表上進行等概率成功查詢的平均查詢長度,拉鍊法 線性探測法 a.1.0 b.1.5 ...

百度筆試題

1 完成函式 size t foo unsigned int a1,size t al1,unsigned int a2,size t al2 其中a1和a2都為無符號陣列,al1和al2為陣列的長度,陣列的長度為偶數。無符號陣列由一對數字區間組成。如下例 a1 為 0,1,3,6,10,20 a2...