题解 | 分割等和子集

alt

题干解析

题设给予我们一个数组,要求我们进行判定所给数组能够拆分为两个总和一致的数组。

算法思路

首先大前提,我们必须知道这个数组所有值的总和,记作sum,当且仅当sum是个偶数时我们才可能将数组拆分为两个等和子集。

同时我们转化问题为,在数组中选择一定数量的元素,使这些元素的总和大小为。于是我们将问题转化为0/1背包问题。设定状态值为dp[i][j]表示使用前i个元素能否填满大小为j的背包。

于是我们有状态转移方程:

设定初始值dp[0][0] = true;开始DP计算即可。

同时由于DP过程状态转移方程只涉及i与i-1,因此可进行滚动优化内存。

实现代码

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum = 0;
        for (auto i : nums) sum += i;
        if (sum % 2) return false; // 奇数直接返回不行
        sum >>= 1; // 在此处总和已减半
        vector<bool> dp(sum + 1, false);
        dp[0] = true;
        int min_ = 0;
      	// DP,min_是为了防止越界访问,我们不需要考虑大于sum的背包情况
        for (auto i : nums) {
            min_ = min(min_ + i, sum);
            for (int j = min_; j >= i; --j) {
                dp[j] = dp[j] || dp[j - i];
            }
            if (dp[sum]) return true; // 找到立刻返回,其实也可以最后统一返回dp[sum]
        }
        return false;
    }
};

复杂度分析

  • 时间复杂度:
  • 空间复杂度:
全部评论
根本看不懂一点
点赞 回复 分享
发布于 02-28 22:13 江苏
确实,这题思路清晰,学到了!
点赞 回复 分享
发布于 02-27 19:30 四川

相关推荐

高度对口岗位,两段高度垂直实习经历,一段小厂一段高度知名企业,问内推的人挂了的原因,蜀黍以为是自己的简历表述有问题,辛辛苦苦改好之后投了还是当天直接简历挂,本来在国家图书馆自习准备面经的蜀黍直接一整个心态崩了跑厕所一顿爆哭。怎么说呢,毕竟那个岗位是蜀黍心心念念了半年多的岗位,无数次地在代码的海洋里挣扎无数次想过放弃,虽然中间接到过百度发来的offer,&nbsp;可是再三权衡考虑之下,适合自己,自己真正感兴趣的才是最好的,还是只有字节跳动那个岗位是我好不容易找到的一个高度对口的岗位,其他大厂都没有适合我的jd,毕竟我这个方向本身特别小众,是字节跳动的这个岗位一直拖举着我继续学下去的热情,可是呢,换来的是简历被冰冷地划走丢进了人才库,如果真的不匹配的话,完全可以写与该岗位不匹配,但是简历挂的原因直接写的其他,其他这个字眼,像是一个万能的垃圾桶,似乎无论什么无厘头被挂的原因都可以作为最好的回应,我怀疑被hrbp恶意挂简历了,或者是没hc了(可是问其他人说暑期实习不可能没hc,蜀黍也没想过把hr往坏的方面想,但就是很莫名其妙,也特别不甘心)还是说,终究是个人的努力还不如命运和气运的轻描一笔有好消息是懂车帝的web3d之前还是很热情的邀请我了年后面试,可惜最令我乐极生悲的是最近找回去问的时候说暂时没hc了,我感觉我就像个笑话像个备胎,我准备了那么久的面试算什么呢?可是这个等待是多久呢?一个月?两个月?或者再也不可能释放?我没有时间在这个无底洞上继续考虑较量了。我妈还建议我,直接回学校算了,可是因为学校的种种经历我早就对学校厌恶到了极致,说想让我在长沙随便找个实习到时候就直接秋招,可是我扪心自问,我真的甘心吗?&nbsp;不甘心,在北京实习的半年以来,磨砺了我太多的心智,经历过转岗前的压力,加班加到手抖,作为唯一的大三本科生为了跟那些全是92研究生实习生的绩效平齐,经历过几次交心,还扛着学校给我带来的巨大压力,和家长找院长送三百多的水果沟通无果甚至还被当做反面教材教育同学们,找代做被骗了几百块,天天战战兢兢地问代课的人有没有被发现,舍友查寝不肯给我打掩护我只有自己给自己的桌面做上掩体,辛辛苦苦完成了大作业的一个学科因为卷面分差一点点还是擦着线挂了科,最后还是得忍着恶心回学校参加补考,我自荆棘深处来,一身风雨淬炼成骨血里的倔强,好不容易触到那寸向阳的光,那是我用整个花期换来的救赎。这样的玫瑰,如何甘愿再垂下头,去吻那荒漠的荒?这几天一直昏昏沉沉丝毫没胃口,有时候会突然掉眼泪,看着周围的人一个个都成为忠诚的节孝子或者其他的大厂孝子了,我真的觉得自己配不上那个高浓度的圈子,默默地选择了退群,似乎有两段实习经历也不能解决什么,运气真的太背了,或者说,还是自己真的太菜了,对自己的认知根本就不够,我已经不知道我接下来该怎么走了,其实我做不到一下子放过自己,就像分手也有一段时间的过渡期要挺过更:打算先好好沉淀一下,牛客就先卸载啦引流:
牛客99087562...:抱抱你,不要内耗,简历挂你只能说是他们的损失,虽然运气暂时没那么好,但是懂车帝之前都邀请你了说明你的能力还是得到了高度认可的,只是时间线的问题,时刻保持上进的心就一定会柳暗花明又一村的,加油吧,好好休息一下啦,期待在懂车帝看到你
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务