LeetCode热题100 分割等和子集

题目描述

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

示例 1:

输入:nums = 1,5,11,5

输出:true

解释:数组可以分割成 1, 5, 5 和 11 。

示例 2:

输入:nums = 1,2,3,5

输出:false

解释:数组不能分割成两个元素和相等的子集。

提示:

1 <= nums.length <= 200

1 <= numsi <= 100

思路

把题目转变为,是否能取出一些数,使得加起来是总和的一半。那么就是动态规划经典模板了,dpij表示考虑前i个数,总和为j的是否存在。

代码

cpp 复制代码
class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int n = nums.size();
        if(n < 2) return false;
        int m = 0;
        int maxNum = 0;
        for(int i = 0; i < n; ++i)
        {
            m += nums[i];
            maxNum = max(nums[i], maxNum);
        }
        if(m & 1) return false;
        m /= 2;
        if(maxNum > m) return false;

        // 考虑前i个数, 和是否为总数的一半
        vector<int>dp(m + 1, false);
        dp[0] = true;
        for(int i = 1; i <= n; ++i)
        {
            int num = nums[i - 1];
            for(int j = m; j >= num; --j)
            {
                dp[j] |= dp[j - num];
            }
        }

        return dp[m];
    }
};
相关推荐
zyl76511 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
爱读书的小胖14 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌14 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
OPEN-F15 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_3077791315 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
AI wins15 小时前
c++新增頭文件
c++
Shadow(⊙o⊙)15 小时前
仿muduo实现高并发服务器——事件就绪管理Channel.hpp
服务器·c++
tomwang032215 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类
小羊没烦恼!15 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
by2099915 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表