数组分割问题——另一种方法
http://blog.csdn.net/lengzijian/article/details/7842551
還需要驗證
最近一直看編程之美,想法真的很重要,今天發這篇文章還是有一點不自信,希望碰到志同道合的同學一起討論下!
?
 
 
?
題目:
有一個無序、元素個數為2n的正整數數組,要求:如何能吧這個數組分割為元素個數為n的兩個數組,并使兩個子數組的和最近?
例如有如下數組如圖:
?
第一行:源數組
第二行:目的數組
書中講了很多方法,這里就不在贅述了,我的方法也很簡單,相信很多人也想到了,但是沒有辦法證明這個方法的可靠性。今天我們主要講下,該方法的可靠性。
?
先來說下方法:
1.????首先對無序數組進行排序(時間復雜度nlogn)
2.????從當前源數組中取最大的元素,放置到一個和最小的目的數組中(起初都為0,故可以隨意放置),同時這個最大元組從源數組中刪除。
3.????重復第2步,直到源數組個數為0
?
按照如上方法:上題的到的結果為:
?
左邊和為43,右邊為44。符合題意。
?
很多人第一感覺就是,①題目不會這么簡單,②這種解法可能會有漏洞,下面對該種解法,做一下個人的理解。
?
1.????我把這種問題看作是往天平上放籌碼,放到最后的要求是天平兩端的差異最小;
2.????先把要放的籌碼都排好序;
3.????先放置最大籌碼到天平的任意一段(起初天平是平衡的);
4.????放置第二塊籌碼到天平籌碼重量輕的一段;
5.????放置第三塊籌碼到天平籌碼輕的一段(一定是和第二塊一起)。這時,有兩種可能:①:天平沒有動,此時應按照規則繼續放下一塊;②天平平衡有變化(包括兩邊平衡和逆變化),我們可以確定的是,此時此刻天平兩邊的籌碼重量差一定小于等于剛剛放上的籌碼(目前天平上最輕的籌碼)
6.????按照上面的方法,放到最后一塊后,如果天平平衡是有變化的,我們可以保證天平量變的差值永遠小于等于所有籌碼最小的一個。當沒有變化是,也可以保證我們的結果是正確的(自己考慮下)
?
目前我能想到的只有這些,根據上面的規則時間復雜度應該為nlogn(排序)+n = O(nlogn)
?
總結
以上是生活随笔為你收集整理的数组分割问题——另一种方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: KMP算法与一个经典概率问题
- 下一篇: 分层遍历二叉树
