/**
* 416. 分割等和子集
* @author wsq
* @date 2020/10/11
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
注意:
每个数组中的元素不会超过 100
数组的大小不会超过 200
示例 1:
输入: [1, 5, 11, 5]
输出: true
解释: 数组可以分割成 [1, 5, 5] 和 [11].
示例 2:
输入: [1, 2, 3, 5]
输出: false
解释: 数组不能分割成两个元素和相等的子集.
链接:https://leetcode-cn.com/problems/partition-equal-subset-sum
*/
package com.wsq.dp;
public class CanPartition {
/**
* 一开始想着用回溯的方式去实现,但是性能方面不够优化,导致运行失败
* 动态规划还是掌握的不熟练,加强训练吧
* @param nums
* @return
*/
public boolean canPartition(int[] nums) {
int n = nums.length;
if(n < 2) {
return false;
}
int totalSum = 0, maxNum = 0;
for(int i = 0; i < n; i++) {
totalSum += nums[i];
maxNum = Math.max(maxNum, nums[i]);
}
if(totalSum % 2 != 0) {
return false;
}
int target = totalSum / 2;
if(maxNum > target) {
return false;
}
// 初始化动态规划矩阵
// boolean[][] dp = new boolean[n][target + 1];
// for(int i = 0; i < n; i++) {
// dp[i][0] = true;
// }
// // 设定首个满足的数
// dp[0][nums[0]] = true;
// for(int i = 1; i < n; i++) {
// int num = nums[i];
// for(int j = 1; j < target + 1; j++) {
// if(j >=num) {
// dp[i][j] = dp[i-1][j] | dp[i-1][j-num];
// }else {
// dp[i][j] = dp[i-1][j];
// }
// }
// }
// 由于i状态的值只与i-1状态相关,因此可考虑采用以为数组代替二维数组
boolean[] dp = new boolean[target + 1];
dp[0] = true;
for(int i = 0; i < n; i++) {
int num = nums[i];
for(int j = target; j >= num; j--) {
dp[j] |= dp[j-num];
}
}
return dp[target];
}
public static void main(String[] args) {
int[] nums = {1, 5, 11, 5};
CanPartition cp = new CanPartition();
boolean ans = cp.canPartition(nums);
System.out.println(ans);
}
}
相关推荐
clumsy一款模拟弱网的工具
利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。
leetcode 416. 分割等和子集
分割等和子集题解集合DFS记忆化搜索记忆化搜索的另一种写法动态规划「滚动数组」解法「一维空间优化」解法 DFS 思路 题意就是:给你一个非空数组,和为sum,你能否找到一个子序列,和为sum/2。 如果sum为奇数,肯定找不到,因为sum/2为小数,而数组只包含正整数。 如果sum为偶数,有可能找到。 对于每个元素,都有 选或不选它 去组成子序列。我们可以 DFS 回溯去穷举所有的情况。 每次考察一个元素,用索引i描述,还有一个状态:当前累加的curSum。 递归函数:基于已选的元素(和为cur..
拯救你的备份数据!STM32F407 RTC Tamper功能防篡改设计指南
本文详细介绍了STM32F407 RTC Tamper功能在物联网数据安全中的应用,包括硬件触发、数据清除和时间戳记录等核心机制。通过实战案例和代码示例,展示了如何构建多层次的防御体系,确保敏感数据在物理入侵时自动擦除并记录精确时间戳,适用于智能门锁、工业传感器等高安全需求场景。
416. 分割等和子集——【Leetcode每日刷题】
416. 分割等和子集 给你一个 **只包含正整数** 的 **非空** 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
OpenAI Codex 国内安装配置全攻略:从零到实战的 AI 编程助手集成指南
AI 编程助手正成为提升开发效率的关键工具,其核心原理是基于大规模语言模型对代码语义进行深度理解与生成。这类技术通过将自然语言指令转化为可执行的代码、自动化重构与调试,为开发者提供了智能化的结对编程体验,其技术价值在于显著降低编码复杂度、加速项目迭代。在实际应用场景中,AI 编程助手可集成于日常开发流,辅助完成代码生成、项目分析与自动化任务。本文聚焦于 OpenAI 的 Codex,针对国内开发者在网络、认证和配置上的常见挑战,提供了涵盖多种安装方式、详细配置步骤及核心使用技巧的实战指南,并特别介绍了如何利
Opencv项目实战:09 物体尺寸测量
《Opencv项目实战:09 物体尺寸测量》本项目主要是运用了之前扫描文档的思想,以A4纸为背景,检测其中区域的物体长和宽。我的摄像头无法固定,所以是手持的,且由于我在寝室里面是真的没有找到合适的测量物体以及背景色(全是米色或原木色的)。所以效果有所欠缺,但经过ps修改的图片,检测的效果还是很不错的。
LeetCode 416.分割等和子集 【超详细解答】
LeetCode 416.分割等和子集1. 问题描述2. 解法分析2.1 状态和选择2.2 dp数组的定义2.3 状态转移的逻辑2.4 处理边界情况2.5 初步代码3. 状态压缩/代码优化 1. 问题描述 这是一道经典的0-1背包问题变种,但是更简单一些。首先我们回顾一下背包问题: 给你N个物品和一个可装载重量为W的背包,每个物品有重量和价值两个属性。其中第i个物品的重量为wt[i],价值为val[i],现在让你用这个背包装物品,能装的最大价值是多少? 那么我们这道题如何转换成上述的背包问题呢? N
学Simulink——基于软开关与高频变换的整流器系统场景实例:移相全桥ZVS整流器在轻载条件下的效率优化
本文以Simulink为平台,详细介绍了移相全桥ZVS整流器在轻载条件下的建模与优化方法。通过六个步骤系统讲解了从项目创建到仿真运行的全过程,重点分析了移相全桥拓扑结构、ZVS检测逻辑设计及轻载特性。结果显示,传统移相全桥在轻载时ZVS失效导致效率下降(<88%)。针对此问题,提出了动态频率调整、不对称半桥模式等优化策略。该案例为理解软开关技术、提升电源效率提供了实用建模方法和优化思路。
分割等和子集-动态规划
asdf
世界职业院校技能大赛财经赛道项目参考逐字稿五
世界职业院校技能大赛财经赛道项目参考逐字稿五
Python 爬虫实战:知网论文数据爬取(题录 / 摘要 / 引用提取 + Excel 结构化)
在学术研究中,获取准确且全面的文献数据是至关重要的。知网(CNKI)作为国内最大的学术文献数据库,拥有海量的论文资源。通过 Python 爬虫技术,我们可以高效地从知网爬取论文数据,包括题录、摘要和引用信息,并将这些数据结构化存储到 Excel 文件中,方便后续的学术分析和研究。
leetcode 416:分割等和子集
leetcode 416:分割等和子集 题目描述: 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 解题步骤:需要所选则子集之和等于总和一半即可。 1、 状态定义:dp[i][j]表示从数组的 [0, i] 这个子区间内挑选一些正整数,每个...
PX4从放弃到精通(十一):混控及PWM输出
文章目录前言一、混控脚本二、使用步骤1.引入库2.读入数据总结 前言 一个人可以走的更快,一群人才能走的更远,交流学习加qq:2096723956 更多保姆级PX4+ROS学习视频:https://b23.tv/ZeUDKqy 分享知识,传递正能量,如有疏漏或不当之处,恳请指出. 一、混控脚本 混控脚本定义了不同 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pand
Leetcode416. 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。下标范围内选取若干个正整数(可以是 0 个),是否存在一种选取方案使得被选取的正整数的和等于。在定义状态之后,需要考虑边界情况。以下两种情况都属于边界情况。,可以选取也可以不选取,两种情况只要有一个为。需要分别考虑以下两种情况。的情况下无法选取当前的数字。,则在选取的数字的和等于。...
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
leetcode 416. 分割等和子集
0-1背包 // W 为背包总体积 // N 为物品数量 // weights 数组存储 N 个物品的重量 // values 数组存储 N 个物品的价值 public int knapsack(int W, int N, int[] weights, int[] values) { int[][] dp = new int[N + 1][W + 1]; for (int i = 1; i <= N; i++) { int w = weights[i - 1], v
锂电池充电器电路设计 里面有电路
锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。
【Leetcode hot 100】416.分割等和子集
摘要: 题目要求判断能否将正整数数组分为两个等和子集。解法核心是将问题转化为判断是否存在子集和等于总和一半。通过动态规划,定义 dp[j] 表示能否组成和为 j 的子集,并采用反向遍历避免重复计数。关键剪枝包括:总和为奇数直接返回 false,以及最大元素超过目标和时排除。最终检查 dp[target] 即可得到答案。该算法时间复杂度为 O(n×target),空间复杂度为 O(target)。
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
leetcode 416:分割等和子集
leetcode 416:分割等和子集 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 &l
【leetcode】—416.分割等和子集
✏️ 关于专栏:专栏用于记录中做题与总结。
LeetCode 416 分割等和子集
LeetCode 416 分割等和子集 题目链接 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元素和相等的子集. 典型的背包问题~ 首先和为奇数时肯定不能平均分,对和
416分割等和子集
obsidian给你一个的数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。true数组可以分割成 [1, 5, 5] 和 [11]。false数组不能分割成两个元素和相等的子集。
LeetCode - 416. 分割等和子集
416. 分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 解题思路: 这题一开始我想到的思路是用DFS去解,因为此题有一个明显的特征,每个值有两个选择,即选或者不选,然后要求将集合分为两个子集,使得子集的和相等,那么可以转化为找一个子集,使这个子集的和等于总和的一...
leetcode416. 分割等和子集/动态规划
文章目录题目:416. 分割等和子集基本思想1:dfs(超时)基本思想2:动态规划 题目:416. 分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元
[LeetCode] 416、分割等和子集
题目描述 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。(不要求连续) 示例: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 解题思路 看大佬题解,这又是一个01背包的变形。 问题翻译: 给定一个只包含正整数的非空数组。是否可以从这个数组中挑选出一些正整数,每个数只能用一次,使...
《LeetCode 416 分割等和子集》
动态规划——01背包经典问题
LeetCode 416. 分割等和子集
LeetCode 416. 分割等和子集 link 题目 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元素和相等的子集. 题解 解法一:动态规划 背包问题,先迭代
2552



被折叠的 条评论
为什么被折叠?



