演算法試題 陣列 集合

2021-09-05 19:38:40 字數 3886 閱讀 5427

1.  有乙個整數陣列,請求出兩兩之差絕對值最小的值。

2.  乙個整數數列,元素取值可能是1~n(n是乙個較大的正整數)中的任意乙個數,相同數值不會重複出現。

設計乙個演算法,找出數列中符合條件的數對的個數,滿足數對中兩數的和等於n+1。複雜度不能為o(n2)。

3.  給定乙個集合a=[0, 1, 3, 8] (該集合中的元素都是在0,9之間的數字,但未必全部包含),指定任意乙個正整數k,請用a中的元素組成乙個大於k的最小正整數。比如,a=[1, 0] k=21 那麼輸出結構應該為100。

4.  乙個有序數列,序列中的每乙個值都能夠被2或者3或者5所整除,1是這個序列的第乙個元素。求第1500個值是多少?

5.  1-1000放在含有1001個元素的陣列中,只有唯一的乙個元素值重複,其它均只出現一次。

每個陣列元素只能訪問一次,設計乙個演算法,將它找出來,不用輔助儲存空間。

6.  乙個含n個元素的整數陣列至少存在乙個重複數,請程式設計實現,在o(n)時間內找出其中任意乙個重複數。

7.  輸入a1,a2,...,an,b1,b2,...,bn, 在o(n)的時間,o(1)的空間將這個序列順序改為a1,b1,a2,b2,a3,b3,...,an,bn,且不需要移動,通過交換完成,只需乙個交換空間。

8.  給定乙個存放整數的陣列,重新排列陣列使得陣列左邊為奇數,右邊為偶數。要求:空間複雜度o(1),時間複雜度為o(n)。

9.  輸入乙個整型陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。

求所有子陣列的和的最大值。要求時間複雜度為o(n)。

例如:輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,和最大的子陣列為3, 10, -4, 7, 2,因此輸出為該子陣列的和18。

10.  輸入乙個已經按公升序排序過的陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。

要求:時間複雜度是o(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。

例如:輸入陣列1, 2, 4, 7, 11, 15和數字15。由於4 + 11 = 15,因此輸出4和11。

11.  有兩個序列a, b,大小都為n,序列元素的值任意整數,無序;

要求:通過交換a, b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。

例如: 

var a=[100, 99, 98, 1, 2, 3];

var b=[1, 2, 3, 4, 5, 40];

12.  求乙個矩陣中最大的二維矩陣(元素和最大)。如:

1 2 0 3 4

2 3 4 5 1

1 1 5 3 0

中最大的是:

4 55 3

要求:(1)寫出演算法;(2)分析時間複雜度;(3)用c寫出關鍵**。

13.  乙個整數陣列,長度為n,將其分為m份,使各份的和相等,求m的最大值。

比如可以分成

m=1;

m=2m=3

所以m的最大值為3

14.  求乙個陣列的最長遞減子串行 比如的最長遞減子串行為。

15.  如何對n個數進行排序,要求時間複雜度o(n),空間複雜度o(1)。

16.  輸入乙個正數n,輸出所有和為n連續正數序列。

例如:輸入15,由於1+2+3+4+5 = 4+5+6 = 7+8 = 15,所以輸出3個連續序列1-5, 4-6和7-8。

17.  給定乙個存放整數的陣列,重新排列陣列使得陣列左邊為奇數,右邊為偶數。

要求:空間複雜度o(1),時間複雜度為o(n)。

18.  乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。

請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o(n),空間複雜度是o(1)。

19.  輸入乙個正整數陣列,將它們連線起來排成乙個數,輸出能排出的所有數字中最小的乙個。

例如輸入陣列,則輸出這兩個能排成的最小數字32132。

請給出解決問題的演算法,並證明該演算法。

20.  把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個排好序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如:陣列為的乙個旋轉,該陣列的最小值為1。

21.  陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。

22.  乙個int陣列,裡面資料無任何限制,要求求出所有這樣的數a[i],其左邊的數都小於等於它,右邊的數都大於等於它。

能否只用乙個額外陣列和少量其它空間實現。

23.  在乙個int陣列裡查詢這樣的數,它大於等於左側所有數,小於等於右側所有數。

24.  求隨機數構成的陣列中找到長度大於等於3的最長的等差數列,輸出等差數列由小到大。

格式:輸入[1, 3, 0, 5, -1, 6]

輸出[-1, 1, 3, 5]

要求時間複雜度,空間複雜度盡量小。

25.  遞迴法求陣列中的最大值。

26.  用遞迴的方法判斷整數組a[n]是不是公升序排列。

27.  計算陣列中連續元素和的最大值。

28.  乙個m*n矩陣a,其中m>=1k且n>=100k。 xi是a的行向量,其中1<=i<=m。換句話說,a=。請用乙個最快的演算法來檢測所有的(xi,xj)對,其中xi==xj。

29.  根據上排給出的十個數,在其下排填出對應的十個數。要求下排每個數都是上排那十個數在下排出現的次數。

上排的十個數如下:0, 1, 2, 3, 4, 5, 6, 7, 8, 9

舉乙個例子,

數值: 0,1,2,3,4,5,6,7,8,9

分配: 6,2,1,0,0,0,1,0,0,0

0在下排出現了6次,1在下排出現了2次,2在下排出現了1次,3在下排出現了0次,以此類推…

30.  n個數字(0, 1, … , n-1)形成乙個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字(第乙個為當前數字本身,第二個為當前數字的下乙個數字)。當乙個數字刪除後,從被刪除數字的下乙個繼續刪除第m個數字。

求出在這個圓圈中剩下的最後乙個數字。

31.  輸入兩個整數 n 和 m,從數列1,2,3...n 中隨意取幾個數,使其和等於 m,要求將其中所有的可能組合列出來。

32.  輸入乙個整數n,求從1到n這n個整數的十進位制表示中1出現的次數。

例如,輸入12,從1到12這些整數中包含1 的數字有1, 10, 11和12,1一共出現了5次。

33.  乙個陣列是由乙個遞減數列左移若干位形成的,比如是由左移兩位形成的。

在這種陣列中查詢某乙個數。

34.  給出兩個集合a和b,其中集合a=,集合b=.

問題1、根據集合a中的name查詢出集合b中對應的屬性資訊;

問題2、根據集合b中的屬性資訊(單個屬性,如age<20等),查詢出集合a中對應的name。

35.  設a[1…n]是乙個包含n個不同數的序列。如果在ia[j],則 (i, j)就稱為a中的乙個逆序對。

比如,陣列a=[176, 178, 180, 170, 171],a的逆序對為:(176, 170), (176, 171), (178, 170), (178, 171), (180, 170), (180, 171)。

現在給出乙個整型序列,請找出所有的逆序對的個數。

輸入:為乙個檔案(in),檔案的每一行為乙個序列。序列全為數字,數字間用」,」分隔。

輸出:為乙個檔案(out),每行為乙個數字,表示逆序對的個數。

分析時間複雜度。(說明:輸入每行的最大數字個數為100000個,數字最長為6位。程式無記憶體使用限制)

36.  在陣列中,數字減去它右邊的數字得到乙個數對之差。

求所有數對之差的最大值。

例如在陣列中,數對之差的最大值是11,是16減去5的結果。

37.  輸入乙個整數,求該整數的二進位制表達中有多少個1。

陣列演算法集合

1.氣泡排序 平均時間複雜度 o n 2 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需...

試題 演算法訓練 集合運算

問題描述 給出兩個整數集合a b,求出他們的交集 並集以及b在a中的餘集。輸入格式 第一行為乙個整數n,表示集合a中的元素個數。第二行有n個互不相同的用空格隔開的整數,表示集合a中的元素。第三行為乙個整數m,表示集合b中的元素個數。第四行有m個互不相同的用空格隔開的整數,表示集合b中的元素。集合中的...

試題 演算法提高 翔集合

問題描述 集合m至少有兩個元素 實數 且m中任意兩個元素差的絕對值都大於2,則稱m為 翔集合 已知集合s 請求出n的子集中共有多少個翔集合。輸入格式 輸入共一行,乙個整數n.n 2 輸出格式 輸出共一行,乙個整數表示s的子集中共有多少個翔集合,由於個數可能過大,請輸出這個值除以1000007的餘數。...