不改變正負數相對順序重新排列數組

來源:互聯網
上載者:User

看到網上一個解法,空間複雜度O(1),時間複雜度O(nlogn)

做一個小演算法題,提提神

一個未排序整數數組,有正負數,重新排列使負數排在正數前面,並且要求不改變原來的正負數之間相對順序。

思考的過程就略去了,直接說結果吧。我想到的演算法,空間複雜度為O(1),時間複雜度為O(N*logN)。

首先,定義這樣一個過程為“翻轉”:(a1,a2,...,am,b1,b2,...,bn) --> (b1,b2,...,bn,a1,a2,...,am)。其次,對於待處理的未排序整數數組,從頭到尾進行掃描,尋找(正正...正負...負負)串;每找到這樣一個串,則計數器加1;若計數為奇數,則對當前串做一個“翻轉”;反覆掃描,直到再也找不到(正正...正負...負負)串。

舉例如下

Input   :  1, -1,   2, -2,  3, -3,  4, -4,   5, -5,  6, -6,  7, -7,  8, -8
Step1.1: [1, -1], 2, -2, [3, -3], 4, -4, [5, -5], 6, -6, [7, -7], 8, -8
Step1.2: [-1, 1], 2, -2, [-3, 3], 4, -4, [-5, 5], 6, -6, [-7, 7], 8, -8
Step2.1: -1, [1, 2, -2, -3], 3, 4, -4, -5, [5, 6, -6, -7], 7, 8, -8
Step2.2: -1, [-2, -3, 1, 2], 3, 4, -4, -5, [-6, -7, 5, 6], 7, 8, -8
Step3.1: -1, -2, -3, [1, 2, 3, 4, -4, -5, -6, -7], 5, 6, 7, 8, -8
Step3.2: -1, -2, -3, [-4, -5, -6, -7, 1, 2, 3, 4], 5, 6, 7, 8, -8
Step4.1: -1, -2, -3, -4, -5, -6, -7, [1, 2, 3, 4, 5, 6, 7, 8, -8]
Step4.2: -1, -2, -3, -4, -5, -6, -7, [-8, 1, 2, 3, 4, 5, 6, 7, 8]
Output: -1, -2, -3, -4, -5, -6, -7,  -8, 1, 2, 3, 4, 5, 6, 7, 8

證明如下

先計算“翻轉”的時間複雜度。

將(a1,a2,...,am,b1,b2,...,bn) 翻轉為 (b1,b2,...,bn,a1,a2,...,am),只要三步:
(a1,a2,...,am,b1,b2,...,bn) -->
(bn,...,b2,b1,am,...,a2,a1) -->
(b1,b2,...,bn,am,...,a2,a1) -->
(b1,b2,...,bn,a1,a2,...,am)
總的來說,時間複雜度為O(2m+2n)

對於長度為N的數串來說,任選其中若干個互不重疊的子串進行翻轉,總的時間複雜度不會超過O(N)。

接下來的問題,是“掃描”進行了多少次。

因為每次掃描只是翻轉不相鄰的(正正...正負...負負)串,因此所有被翻轉的串,從正負數分界處被分為兩部分,分別歸入前後兩個相鄰的(正正...正負...負負)串。因此,每趟掃描能消滅一半的(正正...正負...負負)串。最終,總共需要掃描的次數最多為logN。

綜上,時間複雜度為O(N*logN)。

轉載地址:http://qing.weibo.com/1570303725/5d98eeed33000hcb.html

當然這個詳細介紹可以看:http://blog.csdn.net/v_july_v/article/details/7329314





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.