力扣 -- 416. 分割等和子集(01背包问题)
作者:小教学发布时间:2023-10-03分类:程序开发学习浏览:109
导读:解题步骤:参考代码:未优化代码:classSolution{public:boolcanPartition(vector<...
解题步骤:
参考代码:
未优化代码:
class Solution {
public:
bool canPartition(vector<int>& nums) {
int n=nums.size();
int sum=0;
for(const auto& e:nums)
{
sum+=e;
}
if(sum%2==1)
{
return false;
}
int aim=sum/2;
//多开一行,多开一列
vector<vector<bool>> dp(n+1,vector<bool>(aim+1));
//初始化
for(size_t i=0;i<=n;i++)
{
dp[i][0]=true;
}
for(size_t i=1;i<=n;i++)
{
for(size_t j=1;j<=aim;j++)
{
dp[i][j]=dp[i-1][j]||((j>=nums[i-1])&&dp[i-1][j-nums[i-1]]);
}
}
return dp[n][aim];
}
};
优化后的代码:
class Solution {
public:
bool canPartition(vector<int>& nums) {
int n=nums.size();
int sum=0;
for(const auto& e:nums)
{
sum+=e;
}
if(sum%2==1)
{
return false;
}
int aim=sum/2;
//多开一个位置
vector<bool> dp(aim+1);
//初始化
dp[0]=true;
for(size_t i=1;i<=n;i++)
{
//一定记得要从右往左填写
for(size_t j=aim;j>=nums[i-1];j--)
{
dp[j]=dp[j]||dp[j-nums[i-1]];
}
}
return dp[aim];
}
};
你学会了吗???
- 上一篇:链表经典面试题(四)
- 下一篇:Docker Tutorial
- 程序开发学习排行
- 最近发表
-
- Wii官方美版游戏Redump全集!游戏下载索引
- 视觉链接预览最好的WordPress常用插件下载博客插件模块
- 预约日历最好的wordpress常用插件下载博客插件模块
- 测验制作人最好的WordPress常用插件下载博客插件模块
- PubNews Plus|WordPress主题博客主题下载
- 护肤品|wordpress主题博客主题下载
- 肯塔·西拉|wordpress主题博客主题下载
- 酷时间轴(水平和垂直时间轴)最好的wordpress常用插件下载博客插件模块
- 作者头像列表/阻止最好的wordPress常用插件下载博客插件模块
- Elementor Pro Forms最好的WordPress常用插件下载博客插件模块的自动完成字段