LeetCode 416.分割等和子集(动态规划【0-1背包问题】采用一维数组dp:滚动数组)

news2024/7/6 18:46:29

>>往期文章:

解决0-1背包问题(方案一):二维dp数组_呵呵哒( ̄▽ ̄)"的博客-CSDN博客

解决0-1背包问题(方案二):一维dp数组(滚动数组)_呵呵哒( ̄▽ ̄)"的博客-CSDN博客

LeetCode 416.分割等和子集(动态规划【0-1背包问题】采用一维数组dp:滚动数组)

416. 分割等和子集 - 力扣(LeetCode)

给你一个 只包含正整数 的 非空 数组 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

解题思路来自代码随想录:代码随想录 (programmercarl.com)

本题要求集合里能否出现总和为 sum / 2 的子集。

看看背包问题如何来解决

只有确定了如下四点,才能把01背包问题套到本题上来。

  • 背包的体积为sum / 2
  • 背包要放入的商品(集合里的元素)重量为 元素的数值,价值也为元素的数值
  • 背包如果正好装满,说明找到了总和为 sum / 2 的子集。
  • 背包中每一个元素是不可重复放入。

class Solution {
public:
    bool canPartition(vector<int>& nums) {
        int sum = 0;
        int target = 0;
        for(int i=0;i<nums.size();i++) {
            sum += nums[i];
        }
        if (sum % 2 == 1) return false;
        target = sum / 2;
        // 初始化
        //vector<int> dp(target+1,0);
        vector<int> dp(10001, 0);
        // 遍历
        for(int i=0;i<nums.size();i++) { //遍历物体
            for(int j=target;j>=nums[i];j--) { //遍历背包
                dp[j] = max(dp[j],dp[j-nums[i]] + nums[i]);
            }
        }

        // 返回bool
        if(dp[target] == target) return true;
        return false;
    }
};
// nums = [1,5,11,5] 数组可以分割成 [1, 5, 5] 和 [11] 
// nums = [1,2,3,5] 数组不能分割成两个元素和相等的子集。


// 1 5 11 5 
// {1 5 5}   {11}

// >>分步思考和分析

// 1.求sum
//     1+5+11+5=22
//     sum = 22
// 2.求target = sum / 2
//     22/2=11

// 3.背包问题(O_O)?

// 4.递推公式
// dp[j] = max(dp[j],dp[j-nums[i]] + nums[i]);

// 5.初始化
// dp[0] = 0
// 数组dp可初始化为0

// 6.遍历方式
// 先遍历物体,在从后往前遍历背包
//  0 1 2 3 4 5 6 7 8 9 10 11  j
//  | | | | | | | | | |  | | 
//  --------------------------------
//  0 0 0 0 0 0 0 0 0 0 0  0   初始化
//  0 1 1 1 1 1 1 1 1 1 1  1    价值(max)
//  0 1 1 1 1 5 6 6 6 6 6  6    价值(max)
//  0 1 1 1 1 5 6 6 6 6 6  11   价值(max)
//  0 1 1 1 1 5 6 6 6 6 10 11   价值(max)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1034380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】零基础快速搞定JavaScript核心知识点

【前端】零基础快速搞定JavaScript核心知识点 1.初识JavaScript 1.1.JavaScript语言简介 &#xff08;1&#xff09;简介 JavaScript 是互联网上最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机…

OpenCV直方图的原理与显示、掩膜、均衡化、自适应均衡化

直方图 1 灰度直方图 1.1直方图的绘制和计算 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt#直接以灰度图的方式读入img cv.imread("lena.png",0)#统计灰度图 histr cv.calcHist([img],[0],None,[256],[0,256]) 使用 OpenCV 的 c…

list容器排序案例

案例描述:将Perspn自定义数据类型进行排序&#xff0c;Person中属性有姓名、年龄、身高 排序规则:按照年龄进行升序&#xff0c;如果年龄相同按照身高进行降序 代码示例 #include <iostream> #include <string.h> #include <iterator> #include <vector…

java-- 字符串+拼接详解, 性能调优 (底层原理实现)

目录 简单了解一下字符串 String类里面是如何存放字符串的? String的不可变性 字符串拼接的方法 1.使用拼接字符串 2. 使用concat 3. 使用StringBuilder 4.StringBuffer 使用字符串拼接的原理 使用concat StringBuilder 效率比较 简单了解一下字符串 字符串在java…

Flink---5、聚合算子、用户自定义函数、物理分区算子、分流、合流

星光下的赶路人star的个人主页 欲买桂花同载酒&#xff0c;终不似&#xff0c;少年游 文章目录 1、 聚合算子1.1 按键分区&#xff08;KeyBy&#xff09;1.2 简单聚合&#xff08;Sum/Min/MinBy/MaxBy&#xff09;1.3 归约聚合&#xff08;Reduce&#xff09; 2、用户自定义函数…

redis实战-实现笔记点赞和点赞排行榜

发布探店笔记 探店笔记类似点评网站的评价&#xff0c;往往是图文结合。对应的表有两个&#xff1a; tb_blog&#xff1a;探店笔记表&#xff0c;包含笔记中的标题、文字、图片等 tb_blog_comments&#xff1a;其他用户对探店笔记的评价 保存笔记service层 Overridepublic Re…

实例讲解Spring boot动态切换数据源

前言 在公司的系统里&#xff0c;由于数据量较大&#xff0c;所以配置了多个数据源&#xff0c;它会根据用户所在的地区去查询那一个数据库&#xff0c;这样就产生了动态切换数据源的场景。 今天&#xff0c;就模拟一下在主库查询订单信息查询不到的时候&#xff0c;切换数据…

什么是UWB定位技术?UWB定位的应用场景及功能介绍

说到定位我们并不陌生&#xff0c;定位技术一直与我们的生活密不可分&#xff0c;比如最常见的车辆导航。 根据使用场景&#xff0c;定位技术分为室内定位和室外定位。 室外定位主要依靠GPS&#xff0c;北斗&#xff0c;GLONASS&#xff0c;伽利略等全球卫星定位导航系统。室内…

系统集成|第十一章(笔记)

目录 第十一章 项目人力资源管理11.1 项目人力资源管理的定义及有关概念11.2 主要过程11.2.1 编制项目人力资源管理计划11.2.2 组建项目团队11.2.3 建设项目团队11.2.4 管理项目团队 11.3 现代激励理论11.4 项目经理所需具备的影响力11.5 常见问题 上篇&#xff1a;第十章、质量…

有效保护敏感数据的最佳实践

在当今数据驱动的环境中&#xff0c;数据就是力量&#xff0c;组织仍然高度关注如何利用其数据进行 BI、分析和其他业务驱动计划。 事实上&#xff0c;最近的研究表明&#xff0c;数据领导者的主要动机是对高质量分析洞察的需求&#xff0c;而不是合规性。 然而&#xff0c;…

八大排序--------(五)堆排序

本专栏内容为&#xff1a;八大排序汇总 通过本专栏的深入学习&#xff0c;你可以了解并掌握八大排序以及相关的排序算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库…

如何防止商业秘密泄露(洞察眼MIT系统商业机密防泄密解决方案)

在当今的商业环境中&#xff0c;保护公司的商业秘密是至关重要的。商业秘密可能包括独特的业务流程、客户列表、研发成果、市场策略等&#xff0c;这些都是公司的核心竞争力。一旦这些信息被泄露&#xff0c;可能会对公司的生存和发展产生重大影响。本文将探讨如何通过使用洞察…

【数据结构--排序】堆排序

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

Java 项目-基于 SpringBoot+Vue的疫情网课管理系统

文章目录 第一章 简介第二章 技术栈第三章 系统分析3.4.2学生用例 第四章 系统设计第五章 系统实现5.1学生功能模块5.2管理员功能模块5.3教师功能模块 六 源码咨询 第一章 简介 疫情网课也都将通过计算机进行整体智能化操作&#xff0c;实现的功能如下。 例如 管理员&#x…

如何监控公司电脑上网记录(员工上网行为监控软件有哪些?)

在当今数字化的世界中&#xff0c;互联网已经成为企业运营的重要组成部分。然而&#xff0c;随着这一转变&#xff0c;企业也面临着新的挑战&#xff0c;尤其是关于员工上网行为监控的问题。本文旨在解释公司上网行为监控的含义&#xff0c;重要性&#xff0c;实施方法以及最佳…

msvcp100.dll丢失原因,电脑出现msvcp100.dll丢失错误的解决方法

msvcp100.dll 是一个动态链接库文件&#xff0c;它包含了 C 运行时库的一些函数和类&#xff0c;例如全局对象、异常处理、内存管理、文件操作等。它是 Visual Studio 2010 及以上版本中的一部分&#xff0c;用于支持 C 应用程序的运行。如果 msvcp100.dll 丢失或损坏&#xff…

记一次linux下pip安装包时出错及奇怪的解决过程

一、问题说明 如图&#xff0c;在使用pip安装测速工具speedtest-cli时&#xff0c;终端提示“Externally managed environment &#xff08;从外部管理的环境&#xff09;”&#xff0c;导致无法安装该库。 二、问题解决 1 尝试提示的解决方案&#xff0c;改用命令apt inst…

C++【个人笔记1】

1.C的初识 1.1 简单入门 #include<iostream> using namespace std; int main() {cout << "hello world" << endl;return 0; } #include<iostream>; 预编译指令&#xff0c;引入头文件iostream.using namespace std; 使用标准命名空间cout …

qt 打印当前路径

//当前根目录qDebug()<< QDir::currentPath();//当前exe目录qDebug()<< QCoreApplication::applicationDirPath();//当前exe路径qDebug()<< QCoreApplication::applicationFilePath();分别输出&#xff1a;

文件储存平方根

任务描述 本关任务&#xff1a;给定程序中&#xff0c;函数fun的功能是将自然数1&#xff5e;10以及它们的平方根写到名为myfile3.txt的文本文件中&#xff0c;然后再顺序读出显示在屏幕上。请不要增行或删行&#xff0c;或更改程序的结构。 相关知识 相关知识略 编程要求 …