讀書筆記之程式設計之美 2 18 陣列分割

2021-09-30 05:01:09 字數 326 閱讀 9596

拿到這個題目,首先想到的也是先計算sum/2,然後從2n個陣列找出n個值的和正好為sum/2即可,但是有可能構造不出正好和為sum/2的情況。解法一就不說了,不是正確的解法。

解法二看似是動態規劃,但是只計算出了可能的sum值,好像還是找不到是哪幾個值排列組合出來的。另外,也不知道那個o(2^n)是怎麼算出來的。

解法三有個勘誤,for(i = 1; (i <= k && i <= n); i++)應該修改為for(i = min(k, m); i >= 1; i—);

擴充套件問題:如果陣列中有負數,沒看出有啥不一樣的,還是一樣的演算法吧,因為給所有的數都加上最大的負數的絕對值,就變成正的了。

程式設計之美讀書筆記 2 18 陣列分割

2.18 陣列分割 為了減少遍歷次數,可以先對陣列排序。再將所有可能的組合大致分成幾組,每個組的陣列和也是公升序的,通過不斷的分組 查詢,確定上下邊界條件,最終找到所求子陣列。如果陣列各個元素均不相同,可以採用下面的演算法 先將陣列 排序,並計算出各元素的總和的一半 s sum 2.0 對陣列的劃分...

《程式設計之美》 2 18 陣列分割

題目概述 有乙個沒有排序,元素個數為2n的正整數陣列。要求把它分割為元素個數為n的兩個陣列,並使兩個子陣列的和最接近。假設陣列a 1.2n 所有元素的和是sum。模仿動態規劃解0 1揹包問題的策略,令s k,i 表示前k個元素中任意i個元素的和的集合。顯然 s k,1 s k,k s k,i s k...

程式設計之美 2 18 陣列分割

本人第一次寫部落格,如有不對,請多加指正。解法一的思路很明顯是錯的。貪心演算法很多情況下求不出最佳解答,因為可能兩個陣列間需要同時交換兩個或者兩個以上的數,才能實現差值最小。如 解法二的思路將也就是乙個組合的問題在2n個陣列中找出n個數,使得n個數之和最接近於sum 2,這裡取小於等於sum 2的情...