当前位置: 首页 > news >正文

leetcode hot100【Leetcode 416.分割等和子集】java实现

Leetcode 416.分割等和子集

题目描述

给定一个非负整数的数组 nums ,你需要将该数组分割成两个子集,使得两个子集的元素和相等。如果可以分割,返回 true ,否则返回 false

示例 1:
输入:nums = [1,5,11,5]
输出:true
解释:数组可以分割成 [1, 5, 5] 和 [11]

Java 实现代码

public class Solution {public boolean canPartition(int[] nums) {int sum = 0;for (int num : nums) {sum += num;}// 如果总和是奇数,不能平分if (sum % 2 != 0) {return false;}int target = sum / 2;boolean[] dp = new boolean[target + 1];dp[0] = true; // 和为 0 总是能做到for (int num : nums) {// 从后往前更新 dp 数组for (int j = target; j >= num; j--) {dp[j] = dp[j] || dp[j - num];}}return dp[target];}
}

解题思路

这个问题可以转化为0/1背包问题,我们需要检查是否能在数组中找到一个子集,使得这个子集的和为 sum(nums) / 2。如果可以找到,剩下的元素自然就是另一个子集,两者和相等。

具体步骤:

  1. 首先检查数组总和是否为偶数。如果总和为奇数,直接返回 false,因为无法将其平均分配成两个相等的部分。

  2. 动态规划:定义一个布尔数组 dp,其中 dp[i] 表示是否能够从数组中选取若干个元素,使得它们的和为 i。初始化时,dp[0] = true(因为和为 0 总是可以通过选择空集合得到)。

  3. 遍历数组中的每个元素,对于每个元素,从后往前更新 dp 数组。如果 dp[j - num]true,则说明可以通过添加 num 这个元素使得和为 j,所以设置 dp[j] = true

  4. 最终,判断 dp[target] 是否为 true,其中 target = sum(nums) / 2

复杂度分析

  • 时间复杂度O(n * target),其中 n 是数组 nums 的长度,target 是目标值(即 sum(nums) / 2)。需要遍历每个元素,并且对于每个元素,更新 dp 数组的每个状态。

  • 空间复杂度O(target),我们只需要一个大小为 target + 1 的布尔数组 dp 来存储状态。

执行过程示例

假设 nums = [1, 5, 11, 5]

  1. 计算数组总和:sum = 1 + 5 + 11 + 5 = 22,所以目标是 target = sum / 2 = 11

  2. 初始化 dp 数组:dp[0] = true,其余元素初始化为 falsedp = [true, false, false, false, false, false, false, false, false, false, false, false]

  3. 遍历数组元素,更新 dp 数组:

    • 处理元素 1

      dp[1] = true  // 可以通过选择 1 得到和 1
      dp = [true, true, false, false, false, false, false, false, false, false, false, false]
      
    • 处理元素 5

      dp[6] = true  // 可以通过选择 5 得到和 6
      dp[5] = true  // 可以通过选择 5 得到和 5
      dp = [true, true, false, false, false, true, true, false, false, false, false, false]
      
    • 处理元素 11

      dp[11] = true  // 可以通过选择 11 得到和 11
      dp = [true, true, false, false, false, true, true, false, false, false, false, true]
      
    • 处理元素 5

      dp[10] = true  // 可以通过选择 5 得到和 10
      dp[5] = true   // 可以通过选择 5 得到和 5
      dp = [true, true, false, false, false, true, true, false, false, false, true, true]
      
  4. 最终,dp[11]true,说明可以分割成两个和为 11 的子集,因此返回 true

相关文章:

leetcode hot100【Leetcode 416.分割等和子集】java实现

Leetcode 416.分割等和子集 题目描述 给定一个非负整数的数组 nums ,你需要将该数组分割成两个子集,使得两个子集的元素和相等。如果可以分割,返回 true ,否则返回 false。 示例 1: 输入:nums [1,5,11,…...

《算法导论》英文版前言To the teacher第4段研习录:有答案不让用

【英文版】 Departing from our practice in previous editions of this book, we have made publicly available solutions to some, but by no means all, of the problems and exercises. Our Web site, http://mitpress.mit.edu/algorithms/, links to these solutions. Y…...

Laravel关联模型查询

一,多表关联 文章表articles 和user_id,category_id关联 //with()方法是渴求式加载,缓解了1N的查询问题,仅需11次查询就能解决问题,可以提升查询速度。with部分没有就以null输出,所以可以理解为 多表 left join 查…...

Clickhouse 数据类型

文章目录 字符串类型数值类型日期时间类型枚举类型数组类型元组类型映射类型其它类型 字符串类型 数据类型描述备注String可变长度字符串无长度限制,适用于存储任意字符FixedString固定长度字符串定长字符串,长度在创建时指定,如 FixedStrin…...

物联网智能项目如何实现设备高效互联与数据处理?

一、硬件(Hardware) 设备互联的基础,涵盖传感器、执行器、网关和边缘计算设备。 传感器与执行器 功能: 采集环境数据(如温度、湿度、运动等)并执行控制命令。优化方向: 低功耗、高精度传感器以…...

【云服务器】搭建博客服务

未完待续 一、云服务器二、1panel安装及其容器三、Halo博客 一、云服务器 选择了狗云服务器:狗云-高性价比的服务器 安装系统:Ubuntu22.04 前期配置: 修改ssh端口: 二、1panel安装及其容器 三、Halo博客 主题:butt…...

如何抽象策略模式

策略模式是什么 策略设计模式(Strategy Pattern)是一种面向对象设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。这种模式使得算法可以独立于使用它们的客户端而变化。 策略设计模式包含三个主…...

BERT模型的输出格式探究以及提取出BERT 模型的CLS表示,last_hidden_state[:, 0, :]用于提取每个句子的CLS向量表示

说在前面 最近使用自己的数据集对bert-base-uncased进行了二次预训练,只使用了MLM任务,发现在加载训练好的模型进行输出CLS表示用于下游任务时,同一个句子的输出CLS表示都不一样,并且控制台输出以下警告信息。说是没有这些权重。…...

node.js实现分页,jwt鉴权机制,token,cookie和session的区别

文章目录 1. 分⻚功能2. jwt鉴权机制1.jwt是什么2.jwt的应用3.优缺点 3. cookie,token,session的对比 1. 分⻚功能 为什么要分页 如果数据量很⼤,⽐如⼏万条数据,放在⼀个⻚⾯显⽰的话显然不友好,这时候就需要采⽤分⻚…...

34 基于单片机的指纹打卡系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC,采用两个按键替代指纹,一个按键按下,LCD12864显示比对成功,则 采用ULN2003驱动步进电机转动,表示开门,另一个…...

【Linux】用户操作命令

声明:以下内容均学习自《Linux就该这么学》一书 1、管理员root Linux系统的管理员之所以是root,并不是因为它的名字叫root,而是因为该用户的身份号码UID(User IDentification)的数值是0。UID相当于身份证号码&#x…...

Y20030018基于Java+Springboot+mysql+jsp+layui的家政服务系统的设计与实现 源代码 文档

家政服务系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着人们生活水平的提高,老龄化、少子化等多重因素影响,我国对家政服务人群的需求与日俱增。家政服务行业对我国的就业和社会效益贡献也与日俱增&#…...

windows部署PaddleSpeech详细教程

windows安装paddlespeech步骤: 1. 安装vs c编译环境 对于 Windows 系统,需要安装 Visual Studio 来完成 C 编译环境的安装。 Microsoft C Build Tools - Visual Studio 2. 安装conda conda create -y -p paddlespeech python3.8 conda activate pad…...

线程条件变量 生产者消费者模型 Linux环境 C语言实现

只能用来解决同步问题&#xff0c;且不能独立使用&#xff0c;必须配合互斥锁一起用 头文件&#xff1a;#include <pthread.h> 类型&#xff1a;pthread_cond_t PTHREAD_COND_INITIALIZER 初始化 初始化&#xff1a;int pthread_cond_init(pthread_cond_t * cond, NULL);…...

C++ packaged_task

packaged_task 是 C11 标准库中引入的一个模板类&#xff0c;它用于将可调用对象&#xff08;如函数、lambda 表达式、函数对象或绑定表达式&#xff09;包装起来&#xff0c;并允许异步地获取其结果packaged_task 类提供了一种方便的方式来创建任务&#xff0c;这些任务可以被…...

【联表查询】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...

嵌入式C编程:宏定义与typedef的深入对比与应用

目录 一、宏定义&#xff08;Macro Definition&#xff09; 1.1. 特点与应用 1.1.1 定义常量 1.1.2 定义函数式宏 1.1.3 条件编译 1.2. 作用范围和生命周期方面 1.3. 应用注意事项 二、typedef 2.1. 特点与应用 2.1.1 简化类型声明 2.1.2 提高代码可读性 2.1.3 实现…...

高级java每日一道面试题-2024年12月03日-JVM篇-什么是Stop The World? 什么是OopMap? 什么是安全点?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是Stop The World? 什么是OopMap? 什么是安全点? 我回答: 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;Stop The World、OopMap 和 安全点 是与垃圾回收&#xff08;GC&#xff09;和性能优化密切相关的概念。理…...

【openGauss︱PostgreSQL】openGauss或PostgreSQL查表、索引、序列、权限、函数

【openGauss︱PostgreSQL】openGauss或PostgreSQL查表、索引、序列、权限、函数 一、openGauss查表二、openGauss查索引三、openGauss查序列四、openGauss查权限五、openGauss或PostgreSQL查函数六、PostgreSQL查表七、PostgreSQL查索引八、PostgreSQL查序列九、PostgreSQL查权…...

Dataset用load_dataset读图片和对应的caption的一个坑

代码&#xff1a; data_files {} if args.train_data_dir is not None:data_files["train"] os.path.join(args.train_data_dir, "**")dataset load_dataset("imagefolder",data_filesdata_files,cache_dirargs.cache_dir,) 数据&#xff1…...

揭秘ExplorerPatcher:让Windows界面回归经典的实用工具

揭秘ExplorerPatcher&#xff1a;让Windows界面回归经典的实用工具 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是否对Windows 11的新界面…...

ok-wuthering-waves:基于视觉识别的鸣潮智能辅助系统技术解析

ok-wuthering-waves&#xff1a;基于视觉识别的鸣潮智能辅助系统技术解析 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves ok-wuthe…...

11款独特开源字体,让你的创意设计焕发生机

11款独特开源字体&#xff0c;让你的创意设计焕发生机 【免费下载链接】HoYo-Glyphs Constructed scripts by HoYoverse 米哈游的架空文字 项目地址: https://gitcode.com/gh_mirrors/ho/HoYo-Glyphs 在数字创作领域&#xff0c;字体是视觉表达的核心元素。然而&#xf…...

远程工作事故树:一次误删库引发的跨国追责

远程协作下的“脆弱”系统深夜&#xff0c;伦敦办公室的数据库工程师在连续工作十二小时后&#xff0c;敲下了一条他以为指向“测试环境”的删除命令。与此同时&#xff0c;上海的测试团队正在为次日的上线进行最后一轮回归验证。六小时后&#xff0c;当阳光照进浦东的办公室&a…...

Open-AutoGLM场景实战:电商购物、出行旅游、内容浏览一键完成

Open-AutoGLM场景实战&#xff1a;电商购物、出行旅游、内容浏览一键完成 1. 引言&#xff1a;手机AI助手的革命性突破 想象一下这样的场景&#xff1a;早上醒来&#xff0c;你对手机说"帮我订一杯星巴克拿铁和一份三明治"&#xff0c;手机自动完成打开外卖应用、选…...

GTE多任务NLP引擎部署教程:离线环境下的安装、配置与测试

GTE多任务NLP引擎部署教程&#xff1a;离线环境下的安装、配置与测试 1. 环境准备与快速部署 1.1 系统要求与依赖检查 在开始部署前&#xff0c;请确保您的离线服务器满足以下最低要求&#xff1a; 操作系统&#xff1a;Ubuntu 20.04/22.04 或 CentOS 7/8&#xff08;推荐&…...

假芯片识别与防范:工程师实战指南

1. 假芯片泛滥&#xff1a;半导体行业的隐秘危机最近在调试一块电路板时&#xff0c;我发现一个奇怪的现象&#xff1a;明明使用的是同型号的MCU&#xff0c;但部分板子的功耗异常偏高。经过一周的排查&#xff0c;最终发现问题出在芯片上——我们采购到了一批"套牌"…...

TimesFM时间序列预测模型实战:从基础模型到高效部署的完整路径

TimesFM时间序列预测模型实战&#xff1a;从基础模型到高效部署的完整路径 【免费下载链接】timesfm TimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting. 项目地址: https://…...

如何实现 SEO 优化与广告投放的协同效果

如何实现 SEO 优化与广告投放的协同效果 在当今竞争激烈的互联网环境中&#xff0c;实现 SEO 优化与广告投放的协同效果已经成为提升网站流量和销售转化的关键。SEO&#xff08;搜索引擎优化&#xff09;和广告投放虽然各自有各自的目标和优势&#xff0c;但它们的结合能够带来…...

告别穿模与漂移!南洋理工团队提出HMR新框架:用视觉大模型对齐人体姿态

点击下方卡片&#xff0c;关注「3D视觉工坊」公众号选择星标&#xff0c;干货第一时间送达本文一作投稿发布 | 来源&#xff1a;3D视觉工坊「3D视觉从入门到精通」知识星球(点开有惊喜) &#xff01;星球内有20多门3D视觉系统课程、300场顶会讲解、顶会论文最新解读、海量3D视觉…...