力扣416. 分割等和子集

Problem: 416. 分割等和子集

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述

思路

该题目可以归类为0-1背包问题,具体到细节可以再归纳为背包是否装满问题

1.首先判断数组元素和的奇偶性(奇数则不能划分)
2.我们定义一个二维布尔类型数组,用于记录每一阶段的可选状态
3.针对于动态转移方程:我们要判断最终是否可以选取一些数使其和为原来数组元素和的一半,即通过一层一层的选择数(状态转移),判断最终状态是否可达(能否有一组数使得其和为原来数组元素和的一半)每一个位置都会有选与不选两种状态,若选取则dp[i][j] == dp[i - 1][j - nums[i]],若不选取则dp[i][j] == dp[i - 1][j];则我们可以知道每一个位置的状态只取决于上一层的两个位置的状态即 dp[i][j] == dp[i - 1][j] || dp[i - 1][j - numsi

解题方法

1.获取数组的长度(假设为 n n n),统计数组所有元素的和(假设为 s u m sum sum)并判断若 s u m sum sum为奇数则直接返回false,否则将 s u m sum sum除以2;
2.定义一个Boolean类型的二维数组dp(行数为 n n n,列数为 s u m + 1 sum + 1 sum+1),用于记录每个状态,初始化(将dp[0][0]位置设置为true),并判断若*nums[0]位置值小于sum(注意sum已经除等于2了)*则将dp[0][nums[0]]位置设为true,这样就将第0层的所有状态设置完毕
3.我们从dp数组的第一层开始遍历,并完成动态转移,在没有越界(此处笔者感觉也不能就叫做越界,但是思想和上述思路中的动态转移是一致的。执行该if判断只是为了更好契合该dp数组。读者可以尝试画一画dp数组演示一边便可理解)的情况下(if (j - nums[i] >= 0))则dp[i][j] = dp[i - 1][j] || dp[i - 1][j - nums[i]];否则dp[i][j] = dp[i - 1][j];
4.返回最终位置的状态即**dp[n - 1][sum]**位置的状态

复杂度

时间复杂度:

O ( M N ) O(MN) O(MN);其中 M M M为数组长度, N N N为数组元素和的一半

空间复杂度:

O ( M N ) O(MN) O(MN);其中 M M M为数组长度, N N N为数组元素和的一半

Code

class Solution {/*** Similar to the 0-1 knapsack problem (can the knapsack be filled?)** @param nums Given arrays* @return boolean*/public boolean canPartition(int[] nums) {int n = nums.length;int sum = 0;for (int i = 0; i < n; ++i) {sum += nums[i];}//Indivisible if oddif (sum % 2 == 1) {return false;}sum /= 2;//Records whether each node is reachableboolean[][] dp = new boolean[n][sum + 1];dp[0][0] = true;if (nums[0] <= sum) {dp[0][nums[0]] = true;}//State transition equationfor (int i = 1; i < n; ++i) {for (int j = 0; j <= sum; ++j) {//Determine whether the line has been crossedif (j - nums[i] >= 0) {dp[i][j] = dp[i - 1][j] || dp[i - 1][j - nums[i]];} else {dp[i][j] = dp[i - 1][j];}}}return dp[n - 1][sum];}
}

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

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

相关文章

【opencv】opencv透视变换和ocr识别实验

实验环境&#xff1a;anaconda、jupyter notebook 实验用到的包opencv、numpy、matplotlib、tesseract 一、opencv透视变换 原图 图片是我拍的耳机说明书&#xff0c;哈哈哈哈&#xff0c;你也可以使用自己拍的照片&#xff0c;最好是英文内容&#xff0c;tesseract默认识别英…

iOS Xcode Debug View Hierarchy 查看视图层级结构

前言 我们难免会遇到接手别人项目的情况&#xff0c;让你去改他遗留的问题&#xff0c;想想都头大&#xff0c;&#x1f602;可是也不得不面对。作为开发者只要让我们找到出问题的代码文件&#xff0c;我们就总有办法去解决它&#xff0c;那么如何快速定位问题对应的代码文件呢…

FullCalendar日历组件集成实战(4)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…

python如何做一个服务器fastapi 和flask

用 fastapi 方式的话 from fastapi import FastAPIapp FastAPI()app.get("/api") def index():return "hello world"然后需要安装 uvicorn 并执行下面的命令 uvicorn server:app --port 8000 --reload最终 如果是用 flask 直接写下面的代码 # -*- cod…

IP代理网络协议介绍

在IP代理页面上&#xff0c;存在HTTP/HTTPS/Socks5三种协议。它们都是客户端与服务器之间交互的协议。 HTTP HTTP又称之为超文本传输协议&#xff0c;在因特网使用范围广泛。它是一种请求/响应模型&#xff0c;客户端向服务器发送请求&#xff0c;服务器解析请求后对客户端作出…

20240514基于深度学习的弹性超材料色散关系预测与结构逆设计

论文&#xff1a;Dispersion relation prediction and structure inverse design of elastic metamaterials via deep learning DOI&#xff1a;https://doi.org/10.1016/j.mtphys.2022.100616 1、摘要 精心设计的超材料结构给予前所未有的性能&#xff0c;保证了各种各样的具…

Linux学习笔记(Socket)

Linux-Socket 1、基础知识2、服务端3、客户端4、读写操作4.1、读写函数4.2、阻塞IO和非阻塞IO 5、例程 1、基础知识 socket用于计算机之间的网络通信&#xff0c;无论是构建服务器还是客户端&#xff0c;我们仅需要三个信息&#xff0c;服务器的ip地址&#xff0c;对应进程的端…

OpenAI 新发布的 GPT-4o,有血有肉的Ai来了,可实时语音视频交互

今天&#xff0c;OpenAI又又又开发布会了。 在大众心里&#xff0c;现在也基本上都知道&#xff0c;奥特曼是一个贼能PR的人。 每一次的PR的时间点&#xff0c;都拿捏的极其到位&#xff0c;精准的狙击其他厂商。比如说上一次Sora&#xff0c;其实你会发现从头到尾就是一个PR的…

奥维地图下载高清影像的两种方式!以及ArcGIS、QGIS、GlobalMapper、自编工具下载高清影像的方法推荐!

今天来介绍一下奥维互动地图是如何下载高清影像的&#xff0c;也不是多了不起的功能&#xff01;有朋友问&#xff0c;加上这个软件确实用的人多。 下载的高清数据在ArcGIS中打开的效果&#xff01; 开始介绍奥维之前我们也介绍一下我们之前介绍的几个方法&#xff0c;没有优劣…

zabbix触发器配置定期生效教程

在企业生产过程中&#xff0c;并非所有的设备都需要全天候、满负载运转&#xff0c;也有些仅需要周期性的运转即可。例如&#xff0c;在某家企业&#xff0c;有一批这样的机器&#xff0c;每天都会在固定的时间跑批量任务&#xff0c;期间&#xff0c;机器的CPU使用率会有明显的…

LeetCode 126题:单词接龙 II

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

联软安渡 UniNXG 安全数据交换系统 任意文件读取漏洞复现

0x01 产品简介 联软安渡UniNXG安全数据交换系统,是联软科技自研的业内融合网闸、网盘和DLP的一体机产品,它同时支持多网交换,查杀毒、审计审批、敏感内容识别等功能,是解决用户网络隔离、网间及网内数据传输、交换、共享/分享、存储的理想安全设备,具有开创性意义。 UniN…

什么是BI看板?选择BI看板制作工具时一定要考虑这些方面

BI看板也称为商业智能仪表板&#xff0c;是一种直观的数据可视化工具&#xff0c;它将关键业务指标&#xff08;KPIs&#xff09;和数据以图表、图形和表格的形式集中展示&#xff0c;使用户能够快速获取企业运营的实时概览。 这种数据可视化方式不仅使得复杂的数据信息易于理…

FPGA - Xilinx系列高速收发器---GTX

1&#xff0c;GTX是什么&#xff1f; GT &#xff1a;Gigabit Transceiver千兆比特收发器&#xff1b; GTX &#xff1a;Xilinx 7系列FPGA的高速串行收发器&#xff0c;硬核 xilinx的7系列FPGA根据不同的器件类型&#xff0c;集成了GTP、GTX、GTH、GTZ四种串行高速收发器&am…

(python)cryptography-安全的加密

前言 cryptography 是一个广泛使用的 Python 加密库&#xff0c;提供了各种加密、哈希和签名算法的实现。它支持多种加密算法&#xff0c;如 AES、RSA、ECC 等&#xff0c;以及哈希函数&#xff08;如 SHA-256、SHA-384 等&#xff09;和数字签名算法(如 DSA、ECDSA 等). 目录 …

pikachu靶场通关之csrf漏洞通关教程

目录 CSRF&#xff08;get型&#xff09; 1.打开网站&#xff0c;点击右上角提示 2.登录之后&#xff0c;点击修改个人信息 3.修改上述内容&#xff0c;打开抓包工具 4.抓到修改用户信息的数据包 5.构造虚假url&#xff0c;诱导用户点击 6.弹到修改后的界面 ​编辑 7.返…

前端已死? Bootstrap--CSS组件

目录 Bootstrap 下载 Bootstrap--全局CSS样式 栅格系统 栅格参数 正常显示 实例 代码演示: 排版 代码演示 表格 代码演示 表单 代码演示 等等...(文档很清晰了) Bootstrap--组件 结合演示:(页面) Bootstrap Bootstrap v3 中文文档 Bootstrap 是最受欢迎的 HT…

Open AI再次定义AI PC?

从传统的文字交互&#xff0c;到语音和图像交互——Open AI再次提升了人们对AI PC的想象空间。 这种更贴近人类间交互的模式&#xff0c;会多大程度改变目前PC的生态&#xff1f; 随着苹果M4芯片、高通骁龙X的发布&#xff0c;AI PC也逐渐成为了市场热议的产品。 从各家PC厂…

Spring:SpringBoot Starter 工作原理详解

一、前言 通过使用Spring Boot Starter&#xff0c;开发人员可以避免手动查找和添加每个所需的库&#xff0c;从而大大简化了项目的依赖管理。这些starter不仅包含了库依赖&#xff0c;还可能包含自动配置&#xff0c;从而减少了开发人员需要编写的配置代码。 本文将分析Spring…