陣列中的趣味題二

2021-09-08 17:53:53 字數 2451 閱讀 5679

1.找出陣列中唯一的重複元素

問題描述:給定包含101個元素的陣列arr,陣列中元素一定屬於[1,100],並且[1,100]之間的每個數都在arr**現過。

解決方案:分析,陣列中有101個元素,如果[1,100]之間的每個數出現一次,那就是100個元素了,剩下的那個元素就是唯一的重複出現的元素。我們可以通過遍歷arr,得到arr中所有元素的總和,然後既然[1,100]之間的每個數出現一次,那麼我們減去1+2+……+99+100的和,結果就是我們需要的唯一的重複出現的元素了。時間複雜度是o(n)。

**:

2.找出陣列**現奇數次的元素

問題描述:現在有乙個整數陣列arr,其中的元素只有乙個元素出現奇數次,請找出這個元素。

解決方案:對於任意乙個數k,有k^k = 0,k^0 = k,所以將arr中所有元素進行異或,那麼出現次數為偶數的元素異或後都變成了0,出現次數為奇數的元素異或後得到元素本身。下面寫**就很容易了~~時間複雜度是o(n)。

**:

1 //找出陣列唯一的出現次數是奇數的元素

2 int find(int *arr,intn) 3 9 returnans; 10 }

3.找出兩個陣列中滿足給定和的數對

問題描述:有兩個陣列arr1和arr2,兩個陣列均已經排好序,現在要找出這樣的x和y使得x+y=sum,其中sum已知,x是arr1中某個元素,y是arr2中的某個元素。

**:

4.最大子段和

問題描述:對於整數陣列arr,求出最大連續子段之和,欄位和是這樣的: i 和 j 是陣列下標並且i <= j ,那麼sub_sum = arr[i] + arr[i+1]……+arr[j],就是一段子段和,我們的目的是找到最大的子段和。如果和為負數,按0計算。

**:

//求最大子段和

2 int maxsubsum(int *arr,intn) 3 13 if(max

5.最大子段積

解決方案:和最大子段和的思想和很相似,看**!時間複雜度是o(n)

**:

1 int maxsubmult(int *arr,intn)

2 13 else if(arr[i] < 0) 14 19 else //arr[i] = 0 20 24 if(max_mult >ans) 25 28 } 29 returnans; 30 }

6.一種特殊的排序(重排問題)

問題描述:對於整數陣列arr中包含0和非0元素,現在要對陣列進行處理,使得處理後的結果滿足:(1)0都排在陣列的前面(2)非0元素都在陣列的後面,並且相對順序不能變化。例如arr = ,經處理後的結果應為:。

解決方案:要完成這個要求,只需要從後向前遍歷陣列arr,遇到乙個非0的數就將其放到陣列的後面,遇到的第乙個非0元素放在陣列的第n-1位置,遇到的第二個非0元素放在陣列的第n-2位置(其中n是陣列的大小)。這樣就完成了題目的要求!!!時間複雜度是o(n)

**:

void deal(int *arr,intn)

2 13 tmp--; 14 } 15 } 16 }

7.找出絕對值最小的數

問題描述:整數陣列arr已經排好序,其中包含正數,0負數,陣列大小是n,要求找到絕對值最小的數。

解決方案:通過分析有幾種情況:(1)若arr[0]和arr[n-1]同號且arr[0]>=0,則絕對值最小的數是arr[0];(2)若arr[0]和arr[n-1]同號且arr[0]<=0,則絕對值最小的數是arr[n-1];(3)若arr[0]和arr[n-1]不同號,則絕對值最小數應該是「最小的正整數」和「最大的負整數」中的乙個。關鍵就是找到這「最小的正整數」和「最大的負整數」。既然陣列是已經排好序了,那麼可以利用二分。

**:

1 int minabs(int *arr, intn)

2 7 if(arr[0]*arr[n-1] >= 0) 8 11 int l =0; 12 int r = n - 1; 13 while(l = 0) 22 26 if(arr[l] * arr[m] >= 0) 27 31 } 32 }

MySQL趣味題 Hankson的趣味題

思路 由於x是b1的約數,所以x的質因子一定也是b1的質因子,我們可以對b1的每個質因子p,分別計算a0,a1,b0,b1分別 包含多少個p.然後討論x可能含有幾個p即可 include include include include include include using namespace ...

Hankson的趣味題

問題描述 hanks博士是bt bio tech,生物技術 領域的知名專家,他的兒子名叫hankson。現在,剛剛放學回家的hankson正在思考乙個有趣的問題。今天在課堂上,老師講解了如何求兩個正整數c1和c2的最大公約數和最小公倍數。現在hankson認為自己已經熟練地掌握了這些知識,他開始思考...

Hankson的趣味題(藍橋杯)

時間限制 1 sec 記憶體限制 128 mb 提交 命題人 外部匯入 題目描述hanks 博士是bt bio tech,生物技術 領域的知名專家,他的兒子名叫hankson。現 在,剛剛放學回家的hankson 正在思考乙個有趣的問題。今天在課堂上,老師講解了如何求兩個正整數c1 和c2 的最大公...