416. 分割等和子集

Java实现 LeetCode 416 分割等和子集 416. 分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割... 阅读详情
/**
 * 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);
	}
}

Android AI Agent集成实战:架构设计与自动化技能开发 AI Agent(人工智能代理)是一种能够感知环境、自主规划并执行任务以达成目标的软件实体。其核心原理在于结合大语言模型的推理能力与工具调用(Tool Calling)技术,使应用从被动响应转向主动服务。在移动开发领域,这项技术的价值在于为应用注入“智能大脑”,实现跨应用自动化与个性化交互,从而显著提升用户体验和操作效率。具体到Android平台,其应用场景广泛,例如自动填写表单、智能聊天辅助、个性化工作流优化等。本文聚焦于Android AI Agent的工程化落地,深入探讨了如何利用Accessibil 阅读详情

相关推荐

clumsy一款模拟弱网的工具

利用封装 Winodws Filtering Platform 的WinDivert 库, clumsy 能实时的将系统接收和发出的网络数据包拦截下来,人工的造成延迟,掉包和篡改操作后再进行发送。无论你是要重现网络异常造成的程序错误,还是评估你的应用程序在不良网络状况下的表现,clumsy 都能让你在不需要额外添加代码的情况下,在系统层次帮你达到想要的效果。

klb5555的专栏 2552

leetcode 416. 分割等和子集

分割等和子集题解集合DFS记忆化搜索记忆化搜索的另一种写法动态规划「滚动数组」解法「一维空间优化」解法 DFS 思路 题意就是:给你一个非空数组,和为sum,你能否找到一个子序列,和为sum/2。 如果sum为奇数,肯定找不到,因为sum/2为小数,而数组只包含正整数。 如果sum为偶数,有可能找到。 对于每个元素,都有 选或不选它 去组成子序列。我们可以 DFS 回溯去穷举所有的情况。 每次考察一个元素,用索引i描述,还有一个状态:当前累加的curSum。 递归函数:基于已选的元素(和为cur..

m0_53157173的博客 2202

拯救你的备份数据!STM32F407 RTC Tamper功能防篡改设计指南

本文详细介绍了STM32F407 RTC Tamper功能在物联网数据安全中的应用,包括硬件触发、数据清除和时间戳记录等核心机制。通过实战案例和代码示例,展示了如何构建多层次的防御体系,确保敏感数据在物理入侵时自动擦除并记录精确时间戳,适用于智能门锁、工业传感器等高安全需求场景。

weixin_28278377的博客 279

416. 分割等和子集——【Leetcode每日刷题】

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

weixin_43412762的博客 1518

OpenAI Codex 国内安装配置全攻略:从零到实战的 AI 编程助手集成指南

AI 编程助手正成为提升开发效率的关键工具,其核心原理是基于大规模语言模型对代码语义进行深度理解与生成。这类技术通过将自然语言指令转化为可执行的代码、自动化重构与调试,为开发者提供了智能化的结对编程体验,其技术价值在于显著降低编码复杂度、加速项目迭代。在实际应用场景中,AI 编程助手可集成于日常开发流,辅助完成代码生成、项目分析与自动化任务。本文聚焦于 OpenAI 的 Codex,针对国内开发者在网络、认证和配置上的常见挑战,提供了涵盖多种安装方式、详细配置步骤及核心使用技巧的实战指南,并特别介绍了如何利

weixin_28715081的博客 415

Opencv项目实战:09 物体尺寸测量

《Opencv项目实战:09 物体尺寸测量》本项目主要是运用了之前扫描文档的思想,以A4纸为背景,检测其中区域的物体长和宽。我的摄像头无法固定,所以是手持的,且由于我在寝室里面是真的没有找到合适的测量物体以及背景色(全是米色或原木色的)。所以效果有所欠缺,但经过ps修改的图片,检测的效果还是很不错的。

m0_62919535的博客 1万+

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

More than coding 1803

学Simulink——基于软开关与高频变换的整流器系统场景实例:移相全桥ZVS整流器在轻载条件下的效率优化

本文以Simulink为平台,详细介绍了移相全桥ZVS整流器在轻载条件下的建模与优化方法。通过六个步骤系统讲解了从项目创建到仿真运行的全过程,重点分析了移相全桥拓扑结构、ZVS检测逻辑设计及轻载特性。结果显示,传统移相全桥在轻载时ZVS失效导致效率下降(<88%)。针对此问题,提出了动态频率调整、不对称半桥模式等优化策略。该案例为理解软开关技术、提升电源效率提供了实用建模方法和优化思路。

xiaoheshang_123的博客 118

分割等和子集-动态规划

asdf

sunghosts的专栏 807

世界职业院校技能大赛财经赛道项目参考逐字稿五

世界职业院校技能大赛财经赛道项目参考逐字稿五

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 139

Python 爬虫实战:知网论文数据爬取(题录 / 摘要 / 引用提取 + Excel 结构化)

在学术研究中,获取准确且全面的文献数据是至关重要的。知网(CNKI)作为国内最大的学术文献数据库,拥有海量的论文资源。通过 Python 爬虫技术,我们可以高效地从知网爬取论文数据,包括题录、摘要和引用信息,并将这些数据结构化存储到 Excel 文件中,方便后续的学术分析和研究。

yansideyucsdn的博客 1749

leetcode 416:分割等和子集

leetcode 416:分割等和子集 题目描述: 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 解题步骤:需要所选则子集之和等于总和一半即可。 1、 状态定义:dp[i][j]表示从数组的 [0, i] 这个子区间内挑选一些正整数,每个...

张毅的博客 718

PX4从放弃到精通(十一):混控及PWM输出

文章目录前言一、混控脚本二、使用步骤1.引入库2.读入数据总结 前言 一个人可以走的更快,一群人才能走的更远,交流学习加qq:2096723956 更多保姆级PX4+ROS学习视频:https://b23.tv/ZeUDKqy 分享知识,传递正能量,如有疏漏或不当之处,恳请指出. 一、混控脚本 混控脚本定义了不同 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pand

超维空间科技的博客 1万+

Leetcode416. 分割等和子集

给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。下标范围内选取若干个正整数(可以是 0 个),是否存在一种选取方案使得被选取的正整数的和等于。在定义状态之后,需要考虑边界情况。以下两种情况都属于边界情况。,可以选取也可以不选取,两种情况只要有一个为。需要分别考虑以下两种情况。的情况下无法选取当前的数字。,则在选取的数字的和等于。...

会流泪de鱼的博客 732

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

诗和远方,代码和你 200

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【Leetcode hot 100】416.分割等和子集

摘要: 题目要求判断能否将正整数数组分为两个等和子集。解法核心是将问题转化为判断是否存在子集和等于总和一半。通过动态规划,定义 dp[j] 表示能否组成和为 j 的子集,并采用反向遍历避免重复计数。关键剪枝包括:总和为奇数直接返回 false,以及最大元素超过目标和时排除。最终检查 dp[target] 即可得到答案。该算法时间复杂度为 O(n×target),空间复杂度为 O(target)。

专注Java和MySQL领域知识分享 1103

精雕软件(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

yingmu__的博客 1208

【leetcode】—416.分割等和子集

✏️ 关于专栏:专栏用于记录中做题与总结。

Wneosy的博客 915

LeetCode 416 分割等和子集

LeetCode 416 分割等和子集 题目链接 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元素和相等的子集. 典型的背包问题~ 首先和为奇数时肯定不能平均分,对和

旺崽的博客 2817

416分割等和子集

obsidian给你一个的数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。true数组可以分割成 [1, 5, 5] 和 [11]。false数组不能分割成两个元素和相等的子集。

Kevincxt的博客 256

LeetCode - 416. 分割等和子集

416. 分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 解题思路: 这题一开始我想到的思路是用DFS去解,因为此题有一个明显的特征,每个值有两个选择,即选或者不选,然后要求将集合分为两个子集,使得子集的和相等,那么可以转化为找一个子集,使这个子集的和等于总和的一...

virgilshi的博客 309

leetcode416. 分割等和子集/动态规划

文章目录题目:416. 分割等和子集基本思想1:dfs(超时)基本思想2:动态规划 题目:416. 分割等和子集 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元

yyf_blog 781

[LeetCode] 416、分割等和子集

题目描述 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。(不要求连续) 示例: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 解题思路 看大佬题解,这又是一个01背包的变形。 问题翻译: 给定一个只包含正整数的非空数组。是否可以从这个数组中挑选出一些正整数,每个数只能用一次,使...

aift的专栏 428

《LeetCode 416 分割等和子集》

动态规划——01背包经典问题

2601_95366422的博客 544

LeetCode 416. 分割等和子集

LeetCode 416. 分割等和子集 link 题目 给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5] 输出: false 解释: 数组不能分割成两个元素和相等的子集. 题解 解法一:动态规划 背包问题,先迭代

页页读 334
上一篇: 378. 有序矩阵中第K小的元素
下一篇: 474. 一和零(动态规划)
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值