国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

做電子章網(wǎng)站可以下載新聞視頻的網(wǎng)站

做電子章網(wǎng)站,可以下載新聞視頻的網(wǎng)站,在線平面設(shè)計(jì)接單,企業(yè)網(wǎng)站優(yōu)化怎么做閱讀目錄 1. 題目2. 解題思路3. 代碼實(shí)現(xiàn) 1. 題目 2. 解題思路 此題一看應(yīng)該就是需要用到動(dòng)態(tài)規(guī)劃算法&#xff0c;假設(shè)我們以 f[d]表示總和為 d 的元素組合的個(gè)數(shù)&#xff0c;首先&#xff0c;我們遍歷 nums 數(shù)組&#xff0c; 如果有 nums[i] < target&#xff0c;那么組…

閱讀目錄

    • 1. 題目
    • 2. 解題思路
    • 3. 代碼實(shí)現(xiàn)

1. 題目

2. 解題思路

此題一看應(yīng)該就是需要用到動(dòng)態(tài)規(guī)劃算法,假設(shè)我們以 f[d]表示總和為 d 的元素組合的個(gè)數(shù),首先,我們遍歷 nums 數(shù)組,

如果有 nums[i] < target,那么組合中第一個(gè)元素我們放置 nums[i],組合中余下元素的排列總個(gè)數(shù)也就變成了子問(wèn)題 f[target - nums[i]]

如果有 nums[i] = target,那么組合中只能放置 nums[i]這一個(gè)元素。

3. 代碼實(shí)現(xiàn)

于是,我開(kāi)始實(shí)現(xiàn)了第一版代碼,完全就照著上面的解題思路來(lái)寫(xiě),使用遞歸。

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {int ret = 0;for (int i = 0; i < nums.size(); ++i) {if (nums[i] < target) {ret += combinationSum4(nums, target-nums[i]);}else if (nums[i] == target) {ret += 1;}}return ret;}
};

很可惜,沒(méi)有通過(guò)全部測(cè)試用例,超時(shí)了。

超出時(shí)間限制 10 / 16 個(gè)通過(guò)的測(cè)試用例

這里,計(jì)算 f[target - nums[i]]的時(shí)候有可能存在大量重復(fù),比如,nums=[1, 2, 3, 4], target=5,第一個(gè)元素我們放置 2 時(shí),需要計(jì)算 f(3)。然后,如果前兩個(gè)元素我們都放置 1 時(shí),也需要計(jì)算 f(3)

所以,一個(gè)很自然的思路就是把已經(jīng)計(jì)算過(guò)的 f(d)記錄下來(lái),下次遇到可以直接用。

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {static vector<int> target_ret(1001, -1);int ret = 0;for (int i = 0; i < nums.size(); ++i) {if (nums[i] < target) {int left = target - nums[i];if (target_ret[left] == -1) {target_ret[left] = combinationSum4(nums, left); }ret += target_ret[left];}else if (nums[i] == target) {ret += 1;}}return ret;}
};

于是,我定義了一個(gè)靜態(tài)數(shù)組,全部初始化為 -1,計(jì)算一個(gè) f(d) 后就把它記錄下來(lái),下次直接使用,不用再遞歸去調(diào)用一次函數(shù)。

但是,這次直接變成解答錯(cuò)誤了。我把錯(cuò)誤的用例單獨(dú)拿出來(lái)測(cè)試,答案是對(duì)的。去網(wǎng)上一查,原來(lái) LeetCode 會(huì)用這同一個(gè)類(lèi)去測(cè)試所有的測(cè)試用例,那么我的靜態(tài)數(shù)組就會(huì)受到前一個(gè)測(cè)試用例的影響,所以,答案也就是錯(cuò)的了,此路看來(lái)也不通!

那就只能手動(dòng)遞推了,因?yàn)槲覀冏罱K要計(jì)算 f(target) ,而 f(target) 可能依賴(lài)于 f(target-1)、f(target-2)....f(1),所以我們就從 1 開(kāi)始,一個(gè)一個(gè)往后計(jì)算 f(d) 即可。

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<int> target_ret(target+1, 0);for (int j = 1; j <= target; ++j) {for (int i = 0; i < nums.size(); ++i) {if (nums[i] < j) {int left = j - nums[i];target_ret[j] += target_ret[left];}else if (nums[i] == j) {target_ret[j] += 1;}}}return target_ret[target];}
};

很不幸,還是出錯(cuò)了,看起來(lái)是整型數(shù)超出表示范圍了,一個(gè)簡(jiǎn)單的思路是把 int 換成 unsigned int,終于成功了!

Line 16: Char 35: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type ‘int’ (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:25:35

class Solution {
public:int combinationSum4(vector<int>& nums, int target) {vector<unsigned int> target_ret(target+1, 0);for (int j = 1; j <= target; ++j) {for (int i = 0; i < nums.size(); ++i) {if (nums[i] < j) {int left = j - nums[i];target_ret[j] += target_ret[left];}else if (nums[i] == j) {target_ret[j] += 1;}}}return target_ret[target];}
};

要細(xì)究為什么會(huì)越界的話,其實(shí)題目描述里特別說(shuō)明了 :

題目數(shù)據(jù)保證答案符合 32 位整數(shù)范圍。

但是這里只是說(shuō) f(target) 不會(huì)越界,我們從 1 遍歷到 target 的某個(gè)中間變量可能越界了,然后這個(gè)中間變量實(shí)際上是用不到的。

比如,nums=[2, 6, 9], target=15f(14) 是不會(huì)用到的,但是我們也會(huì)計(jì)算它。

時(shí)間復(fù)雜度為 O ( t a r g e t ? n u m s . s i z e ( ) ) O(target*nums.size()) O(target?nums.size()),空間復(fù)雜度為 O ( t a r g e t ) O(target) O(target)。

如果數(shù)組中存在負(fù)數(shù)的話,會(huì)存在一個(gè)包含正數(shù)和負(fù)數(shù)的序列,它們的和為 0,也就是說(shuō),可以無(wú)限添加這個(gè)序列,而和保持不變,這樣,f(target) 就是無(wú)窮的了。

http://aloenet.com.cn/news/37093.html

相關(guān)文章:

  • 婚紗攝影的網(wǎng)站怎么做什么是百度競(jìng)價(jià)排名服務(wù)
  • 網(wǎng)站內(nèi)鏈?zhǔn)鞘裁?怎么做如何制作一個(gè)簡(jiǎn)單的網(wǎng)頁(yè)
  • 做舞臺(tái)燈光的在哪些網(wǎng)站接訂單呢今日新聞?wù)?0字
  • 怎么做網(wǎng)站的百度排名百度指數(shù)怎么看
  • wordpress密碼漏洞佛山百度seo代理
  • 貴州高端網(wǎng)站建設(shè)網(wǎng)站網(wǎng)址查詢工具
  • 織夢(mèng)網(wǎng)站自助申請(qǐng)友鏈代碼seo建站平臺(tái)哪家好
  • 江蘇省政府門(mén)戶網(wǎng)站建設(shè)方案哪個(gè)行業(yè)最需要推廣
  • 如何將自己做的網(wǎng)站導(dǎo)入淘寶百度電腦版網(wǎng)址
  • 天津做網(wǎng)站的360優(yōu)化大師下載
  • 做網(wǎng)站需要什么源碼惠州seo排名公司
  • 網(wǎng)站建設(shè)品牌策劃方案制作網(wǎng)頁(yè)教程
  • 制作網(wǎng)站的軟件主要有灰色詞排名上首頁(yè)
  • 怎樣做代刷網(wǎng)站長(zhǎng)永久免費(fèi)國(guó)外域名注冊(cè)
  • 正能量網(wǎng)站窗口免費(fèi)進(jìn)網(wǎng)店推廣方式有哪些
  • 長(zhǎng)春網(wǎng)站建設(shè)電話咨詢海外網(wǎng)絡(luò)推廣平臺(tái)
  • 網(wǎng)站建設(shè)步驟網(wǎng)站推廣方案范例
  • 福州市城鄉(xiāng)建設(shè)局網(wǎng)站人工智能培訓(xùn)班
  • 推拿網(wǎng)站制作長(zhǎng)春網(wǎng)絡(luò)科技公司排名
  • 高端網(wǎng)站開(kāi)發(fā)程推廣賺錢(qián)的微信小程序
  • 電子商務(wù)網(wǎng)站建設(shè)與管理 教案2345網(wǎng)址導(dǎo)航官方網(wǎng)站
  • 做搜狗pc網(wǎng)站網(wǎng)站seo標(biāo)題優(yōu)化技巧
  • 做百度競(jìng)價(jià)網(wǎng)站修改影響排名嗎站長(zhǎng)之家seo概況查詢
  • 金華競(jìng)價(jià)排名 金華企業(yè)網(wǎng)站建設(shè)線上營(yíng)銷(xiāo)活動(dòng)有哪些
  • 如何開(kāi)發(fā)一個(gè)微網(wǎng)站sem是什么工作
  • 利用高權(quán)重網(wǎng)站做關(guān)鍵詞運(yùn)營(yíng)和營(yíng)銷(xiāo)是一回事嗎
  • 做外鏈網(wǎng)站優(yōu)化方案官方網(wǎng)站
  • 免費(fèi)網(wǎng)站建設(shè)新技術(shù)優(yōu)化流程
  • 玉樹(shù)營(yíng)銷(xiāo)網(wǎng)站建設(shè)十大營(yíng)銷(xiāo)策劃公司排名
  • 網(wǎng)站規(guī)劃與建設(shè)的流程與方法 高中信息技術(shù)快手seo