日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

My Seventy-first Page - 目标和 - By Nicolas

發(fā)布時(shí)間:2023/12/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 My Seventy-first Page - 目标和 - By Nicolas 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇page是針對leetcode上的494.目標(biāo)和所寫的。小尼先簡單的說明一下這道題的意思,就是給出一個(gè)整數(shù)數(shù)組nums和一個(gè)整數(shù)target,需要向數(shù)組中的每個(gè)整數(shù)前添加'+'或者'-',然后串聯(lián)起所有整數(shù),可以構(gòu)造一個(gè)表達(dá)式,返回可以通過上述方法構(gòu)造的、運(yùn)算結(jié)果等于target的不同表達(dá)式的數(shù)目。

首先呢小尼先簡單的說明一下這道題的解題思路,我們不要把這道題想的過于復(fù)雜,也不要將這道題想的過于簡單,其實(shí)這里可以寫+也可以寫-,其實(shí)無非就是構(gòu)造成正數(shù)或者是負(fù)數(shù),其實(shí)就是我們構(gòu)造兩個(gè)數(shù)組進(jìn)行對應(yīng)的賦值即可,一個(gè)數(shù)組里面全部都是賦值正數(shù),另一個(gè)里面全部都是賦值負(fù)數(shù)。我們?nèi)绻麑⑺械恼龜?shù)數(shù)組都定義為left,所有的負(fù)數(shù)數(shù)組都定義為right,那么我們定義一個(gè)sum=left+right,left-(sum-left)=target,那么我們通過上述三個(gè)式子我們可以推出一個(gè)結(jié)論就是,left=(target+sum)/2,然后我們需要的是滿足為target的組合,其實(shí)就直接轉(zhuǎn)換成了0-1背包問題,裝滿容器為x背包,有幾種方法。

小尼接下來繼續(xù)說明一下動(dòng)態(tài)規(guī)劃五部曲:

1、確定dp數(shù)組以及下標(biāo)的含義:dp[j]表示:填滿j(包括j)這么大容積的包,有dp[j]種方法

2、確定遞推公式:當(dāng)我們考慮到nums[i]的話,湊成dp[j]就有dp[j]-nums[i]種方法,這里其實(shí)就是類似于一個(gè)累加起來的方法

dp[j] += dp[j - nums[i]]

3、dp數(shù)組如何進(jìn)行初始化:從遞歸公式我們可以看出,在初始化的時(shí)候dp[0]一定要初始化為1,因?yàn)閐p[0]是在公式種一切遞推結(jié)果的起源,所以dp[0]一定只能是1,如果為0,那么之后的所有的結(jié)果都將是0

4、確定遍歷順序:跟我們之前說過的0-1背包問題一樣,nums放在外循環(huán),target在內(nèi)循環(huán),且內(nèi)循環(huán)倒序

5、最后就是導(dǎo)出dp數(shù)組

小尼接下來拉一下解題代碼:

class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;for(int i = 0; i < nums.length; i++) sum += nums[i];if((target + sum) % 2 != 0) return 0;int size = (target + sum) / 2;if(size < 0) size = - size;int[] dp = new int[size + 1];dp[0] = 1;for(int i = 0; i < nums.length; i++){for(int j = size; j >= nums[i]; j--){dp[j] += dp[j - nums[i]];}}return dp[size];} }

小尼簡單的即使一下上述的代碼,其中有一個(gè)可以很直接判斷的條件,就是如果(target+sum)%2如果不為0,那么我們直接return false,其實(shí)這里如果不為0就是我們題目的條件給不出返回結(jié)果是算出的數(shù)的背包,其實(shí)就是我們不能組成的,然后接下來我們直接就是進(jìn)行對應(yīng)對遍歷,我們需要返回可以達(dá)到的方法數(shù),最后我們直接返回dp[size]。我們在這道題中先遍歷的是物品,然后再遍歷的是背包的容量,其實(shí)就是我們一個(gè)個(gè)記錄的操作,我們先放入第一個(gè)物品,然后我們記錄好dp數(shù)組,接下來我們繼續(xù)放入之后的物品,然后我們的dp數(shù)組根據(jù)之前已經(jīng)疊加了的數(shù)據(jù)進(jìn)行對應(yīng)的繼續(xù)增加,最后再返回我們的dp[size]的值

希望上述代碼可以幫助到小伙伴們~~~

總結(jié)

以上是生活随笔為你收集整理的My Seventy-first Page - 目标和 - By Nicolas的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。