迅雷筆試題(C++)


2

3

4

5

6

7

8

9

10

11

12

13

14



15



16

17

18

19

20

21

22

23

24



25

26

27

28



29

30

31



32

33

34

35

36

37

38

39

40

41

42

43

44

45

這道題弱智。
你的做法不是O(n)的,你內層while循環不是 O(1)
由于N個數已知是 1 - N
所以,排序后的結果一定是
for (int i = 0; i < N; i++)
data[i] = i+1;
所以,和初始輸入無關,而且不需要臨時存儲空間。 回復 更多評論
其實題目都說了是‘有N個大小不等的自然數(1--N)’,還要‘小到大排序’,那只有一種情況就是從1遞增到N,所以可以不管原來如何直接輸出1-N就行了 回復 更多評論
@bill gates
我的達到要求了。
關鍵問題是如果題目是:有n個數,都是取自1--N(n<N)時候,該如何排序了?
回復 更多評論
@馬賽克007
你的代碼不是O(N),根據題意,明顯是一個技巧題
你有一個while循環做數據交換,其實就是一個for而已
答案1,2樓已經說明。
回復 更多評論
博主的方法也能正確排序,不過時間復雜度肯定不是O(N)。2層循環有點多余,就是不停的把第一個值放到它自己合適的位置上,N次可以完成。當然1樓是最直接的方式,不過出題者會不會說這不是我的出題意圖,哈哈。 回復 更多評論
我在CSDN上也看過這道題的討論,結果就是
for(int i = 0;i < N; ++i)
{
data[i] = i+1;
}
...
感覺有點像腦筋急轉彎 回復 更多評論
汗一把,直接
for(int i = 0;i < N; ++i)
a[i] = i+1;
結束了 回復 更多評論
@馬賽克007
你說“我的達到要求了。關鍵問題是如果題目是:有n個數,都是取自1--N(n<N)時候,該如何排序了? ”
關鍵是如果題目是這樣,你的程序就錯了,還是失敗。 回復 更多評論
@Eric
那肯定了,我的程序是針對迅雷這個題目的。
我說如果,題目是:有n個數,都是取自1--N(n<N)時候,該如何排序了?不是說我這個程序是針對這個題目的。
回復 更多評論
@馬賽克007
題目是:有n個數,都是取自1--N(n<N)時候,該如何排序了?
如果n個數不同的話,用位排序時間復雜度O(N),空間復雜度O(N)是最好的了!
你的解法明顯沒達到題目要求,你應該謙虛一點,好好看看前面的人的說法!你要是在學大學生的話看看《編程珠璣》吧!一定會有一種醍醐灌頂的感覺! 回復 更多評論
只有注冊用戶登錄后才能發表評論。 | ||
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
![]() |
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|