又見排序;及陣列和分析
今日面試題:又見排序
給定大小為n的陣列A,A中的元素有正有負。請給出方法,對其排序,保證:
1. 負數在前面,正數在後面
2. 正數之間相對位置不變
3. 負數之間相對位置不變
能夠做到時間複雜度為O(n),空間複雜度為O(1)麼?
=======================================================
陣列和分析
原題
有陣列A={5,3,8,9,16},第一次遍歷有:A = {3-5,8-3,9-8,16-9}={-2,5,1,7},陣列中元素和為-2+5+1+7=11;第二次遍歷有:A = {5-(-2),1-5,7-1}={7,-4,6},元素和為9. 給定陣列A,求第n次遍歷之後,陣列中元素的和。
分析
處理這樣的題目,如果沒有直接知道相關的原理,可以自己走一下一些具體的例子,這樣就可以發現一些規律,根據這些規律,再去聯想解決的完整方法。
經過觀察,我們可以發現:
- 對於第k次遍歷而言,x_k_1、x_k_2、...、x_k_m,sum = x_k_m - x_k_1
也就是說,第k次遍歷結果的和,只與第一個和最後一個元素先關。下面,就來討論,如何求得第一個和最後一個元素。 我們看題目中的例子,先考慮第一個元素的變化
第一次遍歷 k = 1時:-2=3-5
第二次遍歷 k = 2時:7=5-(-2)=(8-3)-(3-5)=8-2*3+5
第三次遍歷 k = 3時:-11=-4-7=(1-5)-(5-(-2)) = ((9-8)-(8-3)) - ((8-3)-(3-5))=9-3*8+3*3-5
分析到此,想必大家已經能夠明白這其中的規律,其實就是楊輝三角,老外叫帕斯卡三角。最後一個節點是類似的。而且,真個方法的時間複雜度與遍歷的次數n有關,與陣列的大小無關。
【注】楊輝三角,在楊輝的《九章算術》中有記載,那時還叫賈憲三角,只不過後來楊輝的名字非常大,漸漸叫楊輝三角的越來越多。
【分析完畢】
本文來自微信:待字閨中,2013-09-02釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 子序列;及又見排序分析排序
- 陣列和;及此起彼伏分析陣列
- 找陣列的波谷;及巧妙排序的分析陣列排序
- 演算法--陣列氣泡排序和選擇排序原理分析演算法陣列排序
- 陣列的去重和排序陣列排序
- js陣列排序和打亂JS陣列排序
- Java陣列排序和查詢Java陣列排序
- 陣列排序陣列排序
- 3種常見的Web前端陣列排序方式!Web前端陣列排序
- 燈;及陣列統計分析陣列
- Javascript陣列排序sort方法和自定義排序方法JavaScript陣列排序
- 陣列及陣列物件操作 ----------包括排序,去重,合併,翻轉等陣列物件排序
- 陣列的排序陣列排序
- 物件陣列排序物件陣列排序
- JavaScript 陣列排序JavaScript陣列排序
- js陣列排序JS陣列排序
- 又見Google搜尋之星;及須彌之境分析Go
- 查詢提示;及重排陣列分析陣列
- 為什麼處理排序陣列比未排序陣列快排序陣列
- 多維陣列排序陣列排序
- 陣列氣泡排序陣列排序
- 陣列選擇排序陣列排序
- js陣列排序整理JS陣列排序
- javascript 陣列快速排序JavaScript陣列排序
- 陣列多重排序陣列排序
- c# 陣列排序C#陣列排序
- 二維陣列排序陣列排序
- 陣列二:使用陣列可變函式為陣列排序陣列函式排序
- ***PHP陣列排序+php二維陣列排序方法(PHP比較器)PHP陣列排序
- Java集合和陣列的排序方式總結Java陣列排序
- arrilist陣列和collections儲存學生排序陣列排序
- 重排陣列;及消失的數字分析陣列
- 陣列統計;及樹的高度分析陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- JavaScript中常見的陣列操作函式及用法JavaScript陣列函式
- 陣列排序函式-php陣列函式(一)陣列排序函式PHP
- 熟悉的陌生人;及又見Google搜尋之星分析Go
- 二位陣列排序陣列排序