2021-08-23周賽難題惡補(bǔ)

11981. 最小化目標(biāo)值與所選元素的差

難度中等15 收藏 分享 切換為英文 接收動(dòng)態(tài) 反饋
給你一個(gè)大小為 m x n 的整數(shù)矩陣 mat 和一個(gè)整數(shù) target
從矩陣的 每一行 中選擇一個(gè)整數(shù),你的目標(biāo)是 最小化 所有選中元素之 與目標(biāo)值 target絕對(duì)差
返回 最小的絕對(duì)差 拦坠。
ab 兩數(shù)字的 絕對(duì)差a - b 的絕對(duì)值。

記憶化搜索乃競(jìng)賽選手基本技能

我的解(超時(shí))

  • 想法是O(N^3)的貪心尋找一個(gè)局部最優(yōu)解个绍,做剪枝標(biāo)準(zhǔn)
  • 再使用回溯法O(N^3)挽霉,輔以剪枝移盆,以優(yōu)化時(shí)間復(fù)雜度
class Solution:
    def minimizeTheDifference(self, mat: List[List[int]], target: int) -> int:
        min_=[math.inf]
        m,n=len(mat),len(mat[0])
        #isvisited=[False]*m
        #必須使用記憶化搜索,或者使用動(dòng)態(tài)規(guī)劃
        #動(dòng)態(tài)具有最優(yōu)化準(zhǔn)則
        #使用貪心+剪枝
        dp=[[math.inf]*n for _ in range(m)]
        for i in range(n):
            dp[0][i]=target-mat[0][i]
        for i in range(1,m):
            for j in range(n):
                for jj in range(n):
                    dp[i][j]=dp[i-1][jj]-mat[i][j] if abs(dp[i][j])>abs(dp[i-1][jj]-mat[i][j]) \
                        else dp[i][j]
        min_[0]=min([abs(i) for i in dp[-1]])
        #print(min_[0])
        def dfs(sum_,i):
            if i>=m:
                min_[0]=min(min_[0],abs(target-sum_))
                return 
            for j in range(n):
                try:
                    if sum_+mat[i][j]-target>min_[0]:
                        continue
                    #剪枝也不行
                    dfs(sum_+mat[i][j],i+1)
                except:
                    print(i,j)
        dfs(0,0)
        return min_[0]
  • 競(jìng)賽難度之一:每個(gè)題的數(shù)種解法柜裸,沒(méi)有一個(gè)看懂的缕陕,易放棄
  • 使用模擬不同的加和粱锐,可能由于set的去重效果使得時(shí)間復(fù)雜度較低
class Solution:
    def minimizeTheDifference(self, mat: List[List[int]], target: int) -> int:
        f=set([0])
        m,n=len(mat),len(mat[0])
        for i in range(m):
            g=set()
            for j in f:
                for jj in mat[i]:
                    g.add(j+jj)
            f=g
        ans=math.inf
        for i in f:
            ans=min(ans,abs(i-target))
        return ans
            

*剪枝方案疙挺,加和大于target時(shí)記錄最小的大于target的值,加和小于target時(shí)怜浅,向set里更新铐然,最后只需要在大于target的最小值與target的差值,與集合與target差值的最小值比較即可恶座。

該題不需要記錄求解路徑搀暑,故不需要搜索算法,而是使用動(dòng)態(tài)規(guī)劃跨琳,結(jié)合移位運(yùn)算自点,加和可以使用位置表示,加x相當(dāng)于1左移x

class Solution:
    def minimizeTheDifference(self, mat: List[List[int]], target: int) -> int:
        def to_binary_reversed(x):
            ans=''
            while x:
                ans+=str(x%2)
                x//=2
            return ans
        m,n=len(mat),len(mat[0])
        f=[0]*m
        for j in range(n):
            f[0]|=1<<mat[0][j]
        for i in range(1,m):
            for j in range(n):
                f[i]|=f[i-1]<<mat[i][j]
        move=to_binary_reversed(f[-1])
        ans=math.inf
        for i in range(len(move)):
            if move[i]=='1':
                ans=min(ans,abs(i-target))
        return ans


image.png
  • 數(shù)學(xué)知識(shí)解題之:相加為某固定數(shù)脉让,那么這些數(shù)當(dāng)相等時(shí)乘積最大桂敛,當(dāng)這些數(shù)盡可能平均分散在兩側(cè)時(shí)成績(jī)最小。

  • 由上面的定理可知溅潜,當(dāng)sum=p時(shí)术唬,該(sum/n)^n乘積最大,如何最大化該表達(dá)式滚澜,通過(guò)求導(dǎo)以及代數(shù)得粗仓,sum/n=e時(shí)最大,帶入整數(shù)2设捐,3借浊。得sum/n=3時(shí),乘積最大萝招,即三等時(shí)最大蚂斤。

待補(bǔ)題與代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市即寒,隨后出現(xiàn)的幾起案子橡淆,更是在濱河造成了極大的恐慌,老刑警劉巖母赵,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逸爵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡凹嘲,警方通過(guò)查閱死者的電腦和手機(jī)师倔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)周蹭,“玉大人趋艘,你說(shuō)我怎么就攤上這事疲恢。” “怎么了瓷胧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵显拳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我搓萧,道長(zhǎng)杂数,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任瘸洛,我火速辦了婚禮揍移,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘反肋。我一直安慰自己那伐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布石蔗。 她就那樣靜靜地躺著罕邀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抓督。 梳的紋絲不亂的頭發(fā)上燃少,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音铃在,去河邊找鬼阵具。 笑死,一個(gè)胖子當(dāng)著我的面吹牛定铜,可吹牛的內(nèi)容都是我干的阳液。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼揣炕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帘皿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起畸陡,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鹰溜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后丁恭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體曹动,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年牲览,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了墓陈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贡必,靈堂內(nèi)的尸體忽然破棺而出兔港,到底是詐尸還是另有隱情,我是刑警寧澤仔拟,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布衫樊,位于F島的核電站,受9級(jí)特大地震影響理逊,放射性物質(zhì)發(fā)生泄漏橡伞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一晋被、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧刚盈,春花似錦羡洛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肋联,卻和暖如春威蕉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背橄仍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工韧涨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侮繁。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓虑粥,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親宪哩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子娩贷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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

  • 線性表中的雙指針?lè)ㄊ侵竿ㄟ^(guò)兩個(gè)指針(游標(biāo))來(lái)指示線性表中的元素的方法。雙指針的使用本身并沒(méi)有什么神奇之處锁孟,但是通過(guò)...
    Like_eb56閱讀 513評(píng)論 0 0
  • 目錄 1 左神部分集錦 2 Leetcode前150題 3 疟蜃妫客網(wǎng)劍指offer 4 JavaG 5 題目中的...
    小小千千閱讀 999評(píng)論 0 0
  • 一、路徑問(wèn)題 2021.05.13 No.514 自由之路 電子游戲“輻射4”中品抽,任務(wù)“通向自由”要求玩家到達(dá)名為...
    維李設(shè)論閱讀 602評(píng)論 0 0
  • 簡(jiǎn)述 極客時(shí)間算法40講中所出現(xiàn)的leetcode算法題 題目 【鏈表】reverse-linked-list(反...
    BestbpF閱讀 4,475評(píng)論 0 4
  • 一储笑、和問(wèn)題 2020.09.21 No.1 兩數(shù)之和 給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請(qǐng)你...
    維李設(shè)論閱讀 702評(píng)論 0 1