LCR 101. 分割等和子集——力扣——背包问题、动态规矩

news2024/11/19 16:49:36

问题描述

代码展示

class Solution:
    def canPartition(self, nums: List[int]) -> bool:
        if len(nums) <= 1:
            return False
        
        total_sum = sum(nums)
        if total_sum % 2 != 0:  # 总和为奇数,无法分成两个相等的子集
            return False
        
        target_sum = total_sum // 2
        dp = [[False] * (target_sum + 1) for _ in range(len(nums) + 1)]
        
        # 初始化第一列
        for i in range(len(nums) + 1):
            dp[i][0] = True
        
        for i in range(1, len(nums) + 1):
            for j in range(1, target_sum + 1):
                dp[i][j] = dp[i-1][j]
                if j >= nums[i-1]:
                    dp[i][j] = dp[i][j] or dp[i-1][j-nums[i-1]]
        
        return dp[len(nums)][target_sum]

这段代码实现了一个判断给定数组是否可以被划分成两个和相等的子集的功能。

首先,如果数组长度小于等于1,则无法划分,直接返回False。

然后,计算数组中所有元素的总和,如果总和为奇数,则无法划分成两个相等的子集,直接返回False。

接下来,计算目标和,即总和的一半。创建一个二维的布尔型动态规划数组dp,其中dp[i][j]表示前i个元素是否可以组成和为j的子集。

然后,初始化动态规划数组的第一列,将其设为True。这是因为当目标和为0时,任何元素都可以不选,所以前i个元素都可以组成和为0的子集。

接着,遍历数组元素,对于每个元素nums[i-1],在目标和范围内(从1到target_sum),更新动态规划数组。对于每个位置(i, j),如果当前元素不选,则该位置的值与上一行相同,即dp[i][j] = dp[i-1][j];如果当前元素选择了,并且剩余和等于当前位置的值减去当前元素的值,则该位置的值为True,即dp[i][j] = dp[i-1][j-nums[i-1]]

最后,返回动态规划数组的最后一个位置的值,即dp[len(nums)][target_sum],表示前len(nums)个元素是否可以组成和为目标和的子集。

 

背包问题和动态规划问题

这段代码考察的知识点是动态规划(Dynamic Programming)和背包问题(Knapsack Problem)。

动态规划是一种解决问题的方法,它通过将问题分成更小的子问题,并保存子问题的解,从而避免重复计算,提高效率。这段代码中使用了动态规划来解决背包问题。

背包问题是一个经典的组合优化问题,通常有两种变体:0-1背包问题和完全背包问题。这段代码涉及的是0-1背包问题,即每个物品只能选择取或不取。

在这段代码中,给定一个整数数组nums,我们需要判断能否将其划分为两个和相等的子集。首先,我们计算数组的总和total_sum。如果总和为奇数,那么无法将其划分为两个相等的子集,直接返回False。

然后,我们将目标和target_sum设置为总和的一半。创建一个二维的动态规划表dp,dp[i][j]表示前i个物品中是否存在一种方式使得和为j。初始化第一列为True,因为当j为0时,任何物品都可以组成和为0的子集。

接下来,使用两层循环遍历数组nums和目标和target_sum。对于每个元素nums[i-1],我们有两种选择:取它或不取它。如果当前和j大于等于nums[i-1],那么可以选择取这个元素,使得dp[i][j]为True;否则,不取这个元素,保持dp[i][j]不变。最终,返回dp[len(nums)][target_sum]的结果,即是否存在一种方式使得前len(nums)个物品的和为target_sum。

这段代码使用动态规划的思想解决了0-1背包问题,判断了数组能否被划分为两个和相等的子集。

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

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

相关文章

el-tooltip内容换行显示

效果图&#xff1a; html: <div class"rules-tooltip flex-center"><el-tooltip class"item" effect"dark" placement"bottom-start"><div slot"content" v-html"tipsContent"></div>&l…

工具篇 | WSL使用入门教程以及基于WSL和natApp内网穿透实践 - 对比VMWare

介绍 在开发工具中&#xff0c;Windows Subsystem for Linux (WSL) 和 VMWare 它们都可以实现了在 Windows 上运行 Linux系统。 文章概览 WSL Vs VMWare 我们将简单比对 WSL 和 VMWare&#xff0c;在性能、资源消耗等方面的差异&#xff0c;以协助您做出更加明确的选择。 …

专业级操作,如何快速批量虚化多个视频的背景边框

如果你是一名视频编辑爱好者&#xff0c;或者是一名需要处理大量视频素材的专业人士&#xff0c;那么你可能会对如何快速处理和虚化视频的背景边框感到困惑。这里&#xff0c;我们就为你提供一种方法&#xff0c;使用固乔剪辑助手工具&#xff0c;你可以轻松实现批量虚化多个视…

ATA-8000系列射频功率放大器——应用场景介绍

ATA-8000系列是一款射频功率放大器。其P1dB输出功率500W&#xff0c;饱和输出功率最大1000W。增益数控可调&#xff0c;一键保存设置&#xff0c;提供了方便简洁的操作选择&#xff0c;可与主流的信号发生器配套使用&#xff0c;实现射频信号的放大。 图&#xff1a;ATA-8000系…

Kubernetes基本概念简介

零 引入 在传统的应用程序部署中&#xff0c;需要手动配置和管理服务器、网络和存储等基础设施&#xff0c;并且随着应用程序规模的增长&#xff0c;管理复杂性也会大大增加。Kubernetes通过自动化和抽象化的方式&#xff0c;解决了这些挑战&#xff0c;使得应用程序可以以一种…

sdk下载慢的解决办法

Android studio版本&#xff1a;为Android Studio 4.1.1&#xff0c; 先完成Android Studio软件安装&#xff0c;打开Android Studio&#xff0c;点击File -> settings->Android SDK&#xff0c;按照开发需要安装sdk platform、SDK Tools工具。 sdk下载慢解决办法 1、…

Nuxt 菜鸟入门学习笔记六:路由

文章目录 路由 Routing页面 Pages导航 Navigation路由参数 Route Parameters路由中间件 Route Middleware路由验证 Route Validation Nuxt 官网地址&#xff1a; https://nuxt.com/ 路由 Routing Nuxt 的一个核心功能是文件系统路由器。pages/目录下的每个 Vue 文件都会创建一…

【ACL2023】Event Extraction as Question Generation and Answering

论文题目&#xff1a;Event Extraction as Question Generation and Answering 论文来源&#xff1a;ACL2023 论文链接&#xff1a;Event Extraction as Question Generation and Answering - ACL Anthology 代码链接&#xff1a;GitHub - dataminr-ai/Event-Extraction-as-…

PowerDsigner 数据库逆向pdm数模 常见数据库连接问题

本文章记录本人在使用powerdsigner工具&#xff0c;反向工程生成项目数据库表结构以及表关系的过程中遇到的两个常见问题。 问题1&#xff1a;Could not Initialize JavaVM 问题2&#xff1a;Non SQL Error : Could not load class oracle.jdbc.OracleDriver 环境&#xff1…

枚举enum

使用enum关键字定义提供枚举类的对象&#xff0c;多个对象用逗号分开&#xff0c;结尾用分号结束提供构造方法&#xff0c;给属性赋值使用public statiac final来修饰是属性提供get方法提供toString方法 public enum Season {SPRING("春天", "春暖花开"),…

都用HTTPS了,还能被查出浏览记录?

最近&#xff0c;群里一个刚入职的小伙因为用公司电脑访问奇怪的网站&#xff0c;被约谈了。他很困惑 —— 访问的都是HTTPS的网站&#xff0c;公司咋知道他访问了啥&#xff1f; 实际上&#xff0c;由于网络通信有很多层&#xff0c;即使加密通信&#xff0c;仍有很多途径暴露…

达梦数据库使用杂记

1、DM管理工具打开后一片白 这是因为上一次把对象导航窗口手动关闭了&#xff0c;后面再重新打开时默认就不显示了&#xff1b; 只需要到窗口-视图-对象导航 打开即可 2、 查询语句需要带表空间名&#xff0c;如&#xff1a;select * from "表空间名"."表名&…

混合IT基础设施的安全挑战与缓解策略

自从“身份是新的边界”这句格言问世以来&#xff0c;公司已经开始扩展他们的能力和运营&#xff0c;超越了基于本地、办公室基础设施的范围。采用云原生技术意味着组织正在寻求扩大传统工作流程&#xff0c;而无需投入时间和资源来建立物理数据中心和其他硬件基础设施。 身份…

2023版 STM32实战4 滴答定时器精准延时

SysTick简介与特性 -1- SysTick属于系统时钟。 -2- SysTick定时器被捆绑在NVIC中。 -3- SysTick可以产生中断,且中断不可屏蔽。 SysTick的时钟源查看 通过时钟树可以看出滴答的时钟最大为72MHZ/89MHZ 通过中文参考手册也可以得到这个结论 代码编写&#xff08;已经验证&a…

苹果曾考虑基于定位控制AirPods Pro自适应音频

在一次最近的采访中&#xff0c;苹果公司的高管Ron Huang和Eric Treski透露&#xff0c;他们在开发AirPods Pro自适应音频功能时&#xff0c;曾考虑使用GPS信号来控制音频级别。这个有趣的细节打破了我们对AirPods Pro的固有认知&#xff0c;让我们对苹果的创新思维有了更深的…

十三,打印辐照度图

上节HDR环境贴图进行卷积后&#xff0c;得到的就是辐照度图&#xff0c;表示的是周围环境间接漫反射光的积分。 现在也进行下打印&#xff0c;和前面打印HDR环境贴图一样&#xff0c;只是由于辐照度图做了平均&#xff0c;失去了大量高频部分&#xff0c;因此&#xff0c;可以…

unity 限制 相机移动 区域(无需碰撞检测)

限制功能原著地址&#xff1a;unity限制相机可移动区域&#xff08;box collider&#xff09;_unity限制相机移动区域_manson-liao的博客-CSDN博客 一、创建限制区域 创建一个Cube&#xff0c;Scale大小1&#xff0c;添加组件&#xff1a;BoxCollder&#xff0c;调整BoxColld…

花式打印0~100中3的倍数

列表解析3的倍数负步长切片倒序&#xff0c;iter、zip函数配合实现分行格式打印。 (本笔记适合熟悉python列表解析式的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程…

【开发篇】九、SpringBoot整合ES(ElasticSearch)

文章目录 1、整合2、简单示例3、一点补充4、增删改查索引与文档 1、整合 整合思路都一样&#xff0c;先起步依赖或普通依赖&#xff0c;再配置&#xff0c;再封装的操作对象。先引入依赖&#xff1a; <dependency> <groupId>org.springframework.boot</grou…

电子签章软件怎么安装?选本地私有还是SaaS云?

出于高效便捷、安全防伪&#xff0c;以及跟上数字化转型趋势的考虑&#xff0c;越来越多的企业开始考虑使用电子签章软件。 但是每当企业考虑购买电子签章软件时&#xff0c;往往都会面对本地私有部署和SaaS公有云两种不同的电子签章软件安装部署方式&#xff0c;而不知道到底应…