Killing LeetCode [416] 分割等和子集

news/2024/9/28 18:15:38 标签: leetcode, 算法

Description

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

Intro

Ref Link:https://leetcode.cn/problems/partition-equal-subset-sum/description/
Difficulty:Medium
Tag:动态规划,0-1背包问题
Updated Date:2024-09-27

Test Cases

示例 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

思路

  • 动态规划,0-1背包
  • dp[j] = dp[j] || dp[j-nums[i]]; dp[j]定义:是否存在子集和为j的子集,注意dp[0]=true
  • 2层循环,先遍历物品,再逆序遍历背包,即思路是,每次取出物品放入背包后,更新一遍dp数组,直到物品循环放入完毕,得到dp数组的最优解

示例模拟详解

[1,5,11,5]
sum = 22
half = 11

在这里插入图片描述

Code AC

class Solution {
    public boolean canPartition(int[] nums) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        if (sum%2 == 1) return false;
        int halfSum = sum/2;

        boolean[] dp = new boolean[halfSum+1];
        dp[0] = true;
        for (int i = 0; i < nums.length; i++) {
            for (int j = halfSum; j > 0; j--) {
                if (j-nums[i] >= 0)
                    dp[j] = dp[j] || dp[j-nums[i]];
            }
        }
        return dp[halfSum];
    }
}

复杂度分析

  • 时间复杂度:O(n×target),其中 n 是数组的长度,target 是整个数组的元素和的一半。需要计算出所有的状态,每个状态在进行转移时的时间复杂度为 O(1)。
  • 空间复杂度:O(target),空间复杂度取决于 dp 数组。

http://www.niftyadmin.cn/n/5681612.html

相关文章

detectron2是怎么建立模型的?以SparseInst代码为例【结论版】

看SparseInst论文发现论文里有些地方没讲清楚&#xff1b;遂找SparseInst源码来看模型结构 我选择从推理代码来找模型结构&#xff1a; 经探索&#xff0c;在SparseInst代码里&#xff0c;推理需要执行代码 python demo.py --config-file configs/sparse_inst_r50_base.yaml …

Android常用C++特性之std::none_of

声明&#xff1a;本文内容生成自ChatGPT&#xff0c;目的是为方便大家了解学习作为引用到作者的其他文章中。 std::none_of 是 C 标准库中的一个算法&#xff0c;用于检查范围中的所有元素是否都不满足指定的条件。如果范围内的所有元素都不满足给定的条件&#xff0c;则返回 t…

图灵完备-奇数个信号

前言&#xff1a;我不知道背后逻辑&#xff0c;我没有推测完成&#xff0c;但我成功了。 奇数个信号是图灵完备游戏-成对的麻烦的下一个关卡&#xff0c;大意是在四个输入中&#xff0c;只有奇数个输入true才返回true&#xff0c;否则返回false。关卡要求只能使用三个逻辑元件…

BFS 解决最短路问题详解

BFS 解决最短路问题 题目一&#xff1a;迷宫中离⼊⼝最近的出⼝1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3.算法思路&#xff1a;4.代码 题目二. 最⼩基因变化1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3.算法思路&#xff1a;4.代码 题目三&#xff1a;单词接⻰…

人只活一次,活出一道光吧

人只活一次, 你怎么舍得让自己的短暂的一生是丑陋的, 你怎么舍得让自己短暂的一生, 只是在往下坠落, 即便是坠落, 也应该具有落日般的华丽吧, 你会漫漫的活成一束光, 谁若接近你, 就是接近光, 【人人都想向上&#xff0c;人人都想老而不衰&#xff0c;但现实是当你想活成一道光…

如何使用ssm实现基于web的山东红色旅游信息管理系统的设计与实现

TOC ssm716基于web的山东红色旅游信息管理系统的设计与实现jsp 绪论 1.1研究背景 从古到今&#xff0c;信息的录入&#xff0c;存储&#xff0c;检索都受制于社会生产力的发展&#xff0c;不仅仅浪费大量的人力资源还需要浪费大量的社会物资&#xff0c;并且不能长时间的保…

C++深入学习string类成员函数(4):字符串的操作

引言 在c中&#xff0c;std::string提供了许多字符串操作符函数&#xff0c;让我们能够秦松驾驭文本数据&#xff0c;而与此同时&#xff0c;非成员函数的重载更是为string类增添了别样的魅力&#xff0c;输入输出流的重载让我们像处理基本类型的数据一样方便地读取和输出字符…

测试用例的举例

1. 基于测试公式设计测试用例 通过功能&#xff0c;性能&#xff0c;安全性&#xff0c;界面&#xff0c;安全性&#xff0c;易用&#xff0c;兼容对于一个水杯进行测试用例的设计&#xff1b; 对于一个软件的测试用例设计&#xff1a; 功能&#xff1a;软件本质上能够用来干什…