国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【算法與數(shù)據(jù)結(jié)構(gòu)】416、LeetCode分割等和子集

這篇具有很好參考價值的文章主要介紹了【算法與數(shù)據(jù)結(jié)構(gòu)】416、LeetCode分割等和子集。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

所有的LeetCode題解索引,可以看這篇文章——【算法和數(shù)據(jù)結(jié)構(gòu)】LeetCode題解。

一、題目

【算法與數(shù)據(jù)結(jié)構(gòu)】416、LeetCode分割等和子集,算法,算法

二、解法

??思路分析:本題可以抽象成一個01背包的問題,關(guān)于01背包可以看【算法與數(shù)據(jù)結(jié)構(gòu)】算法與數(shù)據(jù)結(jié)構(gòu)知識點。本題只需要求出數(shù)組的累積和,然后和的一半就可以視為背包的最大重量,目標(biāo)就是要判斷數(shù)組中是否有和為背包最大重量的子集。其中,物品重量和價值相同,就是數(shù)組元素的值。根據(jù)01背包的思想,我們寫出如下一維滾動數(shù)組的代碼。
??程序如下

class Solution {
public:
	bool canPartition(vector<int>& nums) {
		int sum = 0;
		for (int i : nums) sum += i;	// 也可以用accumalte函數(shù)
		if (sum % 2 != 0 || nums.size() < 2) return false;
		vector<int> dp(sum/2 + 1, 0);
		for (int i = 0; i < nums.size(); i++) {
			for (int j = sum / 2; j >= nums[i]; j--) {
				dp[j] = max(dp[j], dp[j - nums[i] ] + nums[i]);
			}
		}
		if (dp[sum / 2] == sum / 2) return true;
		return false;
	}
};

復(fù)雜度分析:

  • 時間復(fù)雜度: O ( n 2 ) O(n^2) O(n2)
  • 空間復(fù)雜度: O ( n ) O(n) O(n)。

三、完整代碼

# include <iostream>
# include <vector>
# include <numeric>
# include <algorithm>
using namespace std;

class Solution {
public:
	bool canPartition(vector<int>& nums) {
		int sum = 0;
		for (int i : nums) sum += i;	// 也可以用accumalte函數(shù)
		if (sum % 2 != 0 || nums.size() < 2) return false;
		vector<int> dp(sum/2 + 1, 0);
		for (int i = 0; i < nums.size(); i++) {
			for (int j = sum / 2; j >= nums[i]; j--) {
				dp[j] = max(dp[j], dp[j - nums[i] ] + nums[i]);
			}
		}
		if (dp[sum / 2] == sum / 2) return true;
		return false;
	}
};

int main() {
	vector<int> nums = { 1,5,11,5 };
	Solution s1;
	bool result = s1.canPartition(nums);
	cout << result << endl;
	system("pause");
	return 0;
}

end文章來源地址http://www.zghlxwxcb.cn/news/detail-803066.html

到了這里,關(guān)于【算法與數(shù)據(jù)結(jié)構(gòu)】416、LeetCode分割等和子集的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 01背包問題-遞推公式的自我理解與LeetCode 416. 分割等和子集

    01背包問題-遞推公式的自我理解與LeetCode 416. 分割等和子集

    學(xué)算法好痛苦,完全是對我智力的一次次折磨,看了好多博客,對二維dp數(shù)組的理解都是直接搬了代碼隨想錄,搬了隨想錄又沒詳細解釋,大家都是一眼看懂的嗎,好吧() 如果有一個容量為 j 的這樣的背包——一個獨立的,容量為j的背包。(沒把它理解為“剩余容量”) 對于

    2024年02月07日
    瀏覽(19)
  • [Leetcode] 416. 分割等和子集、1049. 最后一塊石頭的重量 II、494. 目標(biāo)和、474. 一和零

    內(nèi)容:今天復(fù)習(xí)下dp數(shù)組中的背包問題 分割等和子集 - 能否裝滿 最后一塊石頭 - 盡可能裝滿 目標(biāo)和 - 有多少種方法裝 一和零 - 裝滿背包有多少個物品 416. 分割等和子集 10背包:用/不用;有容量;有價值 dp[j] : 容量為j,最大價值為dp[j] ? ? ? ? 重量和價值等價 dp[target] == t

    2024年02月16日
    瀏覽(30)
  • 代碼隨想錄 Day35 動態(tài)規(guī)劃04 01背包問題和完全背包問題 LeetCode T416 分割等和子集

    代碼隨想錄 Day35 動態(tài)規(guī)劃04 01背包問題和完全背包問題 LeetCode T416 分割等和子集

    說到背包問題大家都會想到使用動規(guī)的方式來求解,那么為什么用動規(guī)呢, dp數(shù)組代表什么呢 ? 初始化是什么 , 遍歷方式又是什么 ,這篇文章筆者將詳細講解背包問題的經(jīng)典例題0-1背包問題和完全背包問題的解題方式,希望能幫助到大家 有人一提到背包問題就只會使用動態(tài)規(guī)劃來

    2024年02月06日
    瀏覽(124)
  • 算法訓(xùn)練第四十二天|01背包問題 二維 、01背包問題 一維、416. 分割等和子集

    算法訓(xùn)練第四十二天|01背包問題 二維 、01背包問題 一維、416. 分割等和子集

    視頻鏈接:https://www.bilibili.com/video/BV1cg411g7Y6/ 參考:https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 對于面試的話,其實掌握01背包,和完全背包,就夠用了,最多可以再來一個多重背包。 而完全背包又是也是01背包稍作變化而來,即:完全

    2024年02月01日
    瀏覽(26)
  • 【力扣】416. 分割等和子集 <動態(tài)規(guī)劃、回溯>

    【力扣】416. 分割等和子集 <動態(tài)規(guī)劃、回溯>

    給你一個 只包含正整數(shù)的非空數(shù)組 nums 。請你判斷是否可以將這個數(shù)組分割成兩個子集,使得兩個子集的元素和相等。 示例 1: 輸入:nums = [1,5,11,5] 輸出:true 解釋:數(shù)組可以分割成 [1, 5, 5] 和 [11] 。 示例 2: 輸入:nums = [1,2,3,5] 輸出:false 解釋:數(shù)組不能分割成兩個元素和

    2024年02月10日
    瀏覽(19)
  • 代碼隨想錄day42|背包問題、416. 分割等和子集

    代碼隨想錄day42|背包問題、416. 分割等和子集

    ?背包問題: ? ?01 背包 二維數(shù)組dp[i][j]解法 純01背包:有n件物品和一個最多能背重量為w 的背包。第i件物品的重量是weight[i],得到的價值是value[i] 。 每件物品只能用一次 ,求解將哪些物品裝入背包里物品價值總和最大。 dp[i][j]:從下標(biāo)為[0-i]的物品里任意取,放進容量為j的

    2024年04月09日
    瀏覽(89)
  • 力扣hot100:416.分割等和子集(組合/動態(tài)規(guī)劃/STL問題)

    力扣hot100:416.分割等和子集(組合/動態(tài)規(guī)劃/STL問題)

    組合數(shù)問題 我們思考一下,如果要把數(shù)組分割成兩個子集,并且兩個子集的元素和相等,是否等價于在數(shù)組中尋找若干個數(shù)使之和等于所有數(shù)的一半?是的! 因此我們可以想到,兩種方式: ①回溯的方式找到target,但是回溯是階乘級別的算法,這里會超時。 ②從前往后遍歷

    2024年04月28日
    瀏覽(17)
  • 【Day42】代碼隨想錄之動態(tài)規(guī)劃0-1背包_416. 分割等和子集

    【Day42】代碼隨想錄之動態(tài)規(guī)劃0-1背包_416. 分割等和子集

    動態(tài)規(guī)劃理論基礎(chǔ) 動規(guī)五部曲: 確定dp數(shù)組 下標(biāo)及dp[i] 的含義。 遞推公式:比如斐波那契數(shù)列 dp[i] = dp[i-1] + dp[i-2]。 初始化dp數(shù)組。 確定遍歷順序:從前到后or其他。 推導(dǎo)dp數(shù)組。 出現(xiàn)結(jié)果不正確: 打印dp日志和自己想的一樣:遞推公式、初始化或者遍歷順序出錯。 打印

    2024年02月20日
    瀏覽(97)
  • Day42|動態(tài)規(guī)劃part04: 01背包問題,你該了解這些!、滾動數(shù)組、416. 分割等和子集

    Day42|動態(tài)規(guī)劃part04: 01背包問題,你該了解這些!、滾動數(shù)組、416. 分割等和子集

    其他背包,面試幾乎不會問,都是競賽級別的了,leetcode上連多重背包的題目都沒有,所以題庫也告訴我們,01背包和完全背包就夠用了。 而完全背包又是也是01背包稍作變化而來,即:完全背包的物品數(shù)量是無限的。 01 背包問題描述 有n件物品和一個最多能背重量為w 的背包

    2024年04月25日
    瀏覽(17)
  • 【十七】【動態(tài)規(guī)劃】DP41 【模板】01背包、416. 分割等和子集、494. 目標(biāo)和,三道題目深度解析

    【十七】【動態(tài)規(guī)劃】DP41 【模板】01背包、416. 分割等和子集、494. 目標(biāo)和,三道題目深度解析

    動態(tài)規(guī)劃就像是解決問題的一種策略,它可以幫助我們更高效地找到問題的解決方案。這個策略的核心思想就是將問題分解為一系列的小問題,并將每個小問題的解保存起來。這樣,當(dāng)我們需要解決原始問題的時候,我們就可以直接利用已經(jīng)計算好的小問題的解,而不需要重

    2024年02月03日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包