2021-02-25:給定一個(gè)正數(shù)數(shù)組arr乳丰,請(qǐng)把a(bǔ)rr中所有的數(shù)分成兩個(gè)集合。如果arr長(zhǎng)度為偶數(shù)内贮,兩個(gè)集合包含數(shù)的個(gè)數(shù)要一樣多产园;如果arr長(zhǎng)度為奇數(shù)汞斧,兩個(gè)集合包含數(shù)的個(gè)數(shù)必須只差一個(gè)。請(qǐng)盡量...

2021-02-25:給定一個(gè)正數(shù)數(shù)組arr什燕,請(qǐng)把a(bǔ)rr中所有的數(shù)分成兩個(gè)集合粘勒。如果arr長(zhǎng)度為偶數(shù),兩個(gè)集合包含數(shù)的個(gè)數(shù)要一樣多屎即;如果arr長(zhǎng)度為奇數(shù)庙睡,兩個(gè)集合包含數(shù)的個(gè)數(shù)必須只差一個(gè)。請(qǐng)盡量讓兩個(gè)集合的累加和接近技俐,返回最接近的情況下乘陪,較小集合的累加和。

福哥答案2020-02-25:
自然智慧即可虽另。
1.遞歸暂刘。有代碼。
2.動(dòng)態(tài)規(guī)劃捂刺。dp是三維數(shù)組谣拣。有代碼。

代碼用golang編寫族展,代碼如下:

package main

import "fmt"

const INT_MAX = int(^uint(0) >> 1)
const INT_MIN = ^INT_MAX

func main() {
    arr := []int{1, 2, 3, 4, 100}
    ret := right1(arr)
    fmt.Println("1.遞歸:", ret)
    ret = right2(arr)
    fmt.Println("2.動(dòng)態(tài)規(guī)劃:", ret)
}

func right1(arr []int) int {
    if len(arr) < 2 {
        return 0
    }
    sum := 0
    for _, v := range arr {
        sum += v
    }
    if len(arr)&1 == 0 {
        return process1(arr, 0, len(arr)/2, sum/2)
    } else {
        ret1 := process1(arr, 0, len(arr)/2, sum/2)
        ret2 := process1(arr, 0, len(arr)/2+1, sum/2)
        if ret1 < ret2 {
            return ret2
        } else {
            return ret1
        }
    }
}
func process1(arr []int, i int, picks int, rest int) int {
    if i == len(arr) {
        if picks == 0 {
            return 0
        } else {
            return -1
        }
    } else {
        p1 := process1(arr, i+1, picks, rest)
        p2 := -1
        next := -1
        if arr[i] <= rest {
            next = process1(arr, i+1, picks-1, rest-arr[i])
        }
        if next != -1 {
            p2 = arr[i] + next
        }
        return GetMax(p1, p2)
    }
}

func right2(arr []int) int {
    if len(arr) < 2 {
        return 0
    }
    sum := 0
    for _, v := range arr {
        sum += v
    }
    sum >>= 1
    N := len(arr)
    M := (len(arr) + 1) >> 1
    dp := make([][][]int, N)
    for i := 0; i < N; i++ {
        dp[i] = make([][]int, M+1)
        for j := 0; j < M+1; j++ {
            dp[i][j] = make([]int, sum+1)
            for k := 0; k < sum+1; k++ {
                dp[i][j][k] = INT_MIN
            }
        }
    }
    for i := 0; i < N; i++ {
        for k := 0; k <= sum; k++ {
            dp[i][0][k] = 0
        }
    }
    for k := 0; k <= sum; k++ {
        if arr[0] <= k {
            dp[0][1][k] = arr[0]
        } else {
            dp[0][1][k] = INT_MIN
        }
    }

    for i := 1; i < N; i++ {
        for j := 1; j <= GetMin(i+1, M); j++ {
            for k := 0; k <= sum; k++ {
                dp[i][j][k] = dp[i-1][j][k]
                if k-arr[i] >= 0 {
                    dp[i][j][k] = GetMax(dp[i][j][k], dp[i-1][j-1][k-arr[i]]+arr[i])
                }
            }
        }
    }
    return GetMax(dp[N-1][M][sum], dp[N-1][N-M][sum])
}

func GetMin(a int, b int) int {
    if a < b {
        return a
    } else {
        return b
    }
}
func GetMax(a int, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

執(zhí)行結(jié)果如下:


在這里插入圖片描述

左神java代碼
評(píng)論

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末森缠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仪缸,更是在濱河造成了極大的恐慌贵涵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恰画,死亡現(xiàn)場(chǎng)離奇詭異宾茂,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拴还,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門跨晴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人片林,你說(shuō)我怎么就攤上這事端盆。” “怎么了费封?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵焕妙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我弓摘,道長(zhǎng)焚鹊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任韧献,我火速辦了婚禮末患,結(jié)果婚禮上爷抓,老公的妹妹穿的比我還像新娘。我一直安慰自己阻塑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布果复。 她就那樣靜靜地躺著陈莽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虽抄。 梳的紋絲不亂的頭發(fā)上走搁,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音迈窟,去河邊找鬼私植。 笑死,一個(gè)胖子當(dāng)著我的面吹牛车酣,可吹牛的內(nèi)容都是我干的曲稼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼湖员,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贫悄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起娘摔,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤窄坦,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后凳寺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鸭津,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年肠缨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逆趋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怜瞒,死狀恐怖父泳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吴汪,我是刑警寧澤惠窄,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站漾橙,受9級(jí)特大地震影響杆融,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霜运,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一脾歇、第九天 我趴在偏房一處隱蔽的房頂上張望蒋腮。 院中可真熱鬧,春花似錦藕各、人聲如沸池摧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)作彤。三九已至,卻和暖如春乌逐,著一層夾襖步出監(jiān)牢的瞬間竭讳,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工浙踢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绢慢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓洛波,卻偏偏與公主長(zhǎng)得像胰舆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奋岁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容