LeetCode 416 分割等和子集

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

示例 1:

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

输出:true

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

示例 2:

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

输出:false

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

提示:

1 <= nums.length <= 200

1 <= nums[i] <= 100

Python代码:

python 复制代码
from typing import List

class Solution:
    def canPartition(self, nums: List[int]) -> bool:
        total = sum(nums)
        # 若总和为奇数,直接返回false
        if total % 2 != 0:
            return False
        
        target = total // 2
        # dp[i] 表示能否组成和为i的子集
        dp = [False] * (target + 1)
        dp[0] = True  # 基础情况:和为0的子集存在(空集)
        
        for num in nums:
            # 倒序遍历,避免同一元素被多次使用
            for i in range(target, num - 1, -1):
                if dp[i - num]:
                    dp[i] = True
        
        # 若能组成和为target的子集,则返回true
        return dp[target]
相关推荐
小肝一下21 小时前
每日两道力扣,day6
数据结构·c++·算法·leetcode·双指针·hot100
ByteCraze21 小时前
大四双非春招学习记录-K 个一组反转链表
数据结构·学习·链表
奶人五毛拉人一块21 小时前
模板与vector的学习
数据结构·学习·迭代器·vector·模板
ambition2024221 小时前
【算法详解】飞机降落问题:DFS剪枝解决调度问题
c语言·数据结构·c++·算法·深度优先·图搜索算法
I Promise3421 小时前
C++ 基础数据结构与 STL 容器详解
开发语言·数据结构·c++
徒 花21 小时前
Python知识学习08
java·python·算法
chushiyunen21 小时前
milvus笔记、常用表结构
笔记·算法·milvus
liliangcsdn1 天前
ChromaDB距离计算公式示例
人工智能·算法·机器学习
人道领域1 天前
【LeetCode刷题日记】242.字母异位词
算法·leetcode·职场和发展
卖男孩的小火柴.1 天前
java内置方法总结及基础算法
java·算法