LeetCode-热题100: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 <= nums[i] <= 100

代码及注释

func canPartition(nums []int) bool {res := 0// 计算数组 nums 的总和for i := 0; i < len(nums); i++ {res += nums[i]}// 如果总和为奇数,不能分割成等和子集,直接返回 falseif res % 2 == 1 {return false}// 将总和除以2,问题转化为是否存在和为 res/2 的子集res /= 2// 初始化一个动态规划数组,dp[i] 表示是否存在和为 i 的子集dp := make([]bool, res + 1)dp[0] = true// 遍历 nums 数组,更新 dp 数组for _, num := range nums {for j := res; j >= num; j-- {dp[j] = dp[j] || dp[j - num]}}// 返回 dp[res]return dp[res]
}

代码解释

  1. 计算数组总和

    for i := 0; i < len(nums); i++ {res += nums[i]
    }
    
    • 这里通过循环计算数组 nums 的总和。
  2. 检查总和是否为奇数

    if res % 2 == 1 {return false
    }
    
    • 如果数组 nums 的总和 res 是奇数,那么不能将其分割成两个和相等的子集,直接返回 false
  3. 将总和除以2

    res /= 2
    
    • 将总和 res 除以 2,问题转化为是否存在和为 res/2 的子集。
  4. 动态规划

    dp := make([]bool, res + 1)
    dp[0] = true
    for _, num := range nums {for j := res; j >= num; j-- {dp[j] = dp[j] || dp[j - num]}
    }
    return dp[res]
    
    • 初始化一个动态规划数组 dp,其中 dp[i] 表示是否存在和为 i 的子集。
    • 遍历 nums 数组,并更新 dp 数组:
      • dp[j] = dp[j] || dp[j - num] 表示对于每一个数字 num,如果存在和为 j - num 的子集,那么存在和为 j 的子集。
  5. 返回结果

    return dp[res]
    
    • 返回 dp[res],判断是否存在和为 res 的子集,即是否可以将数组 nums 分割成两个和相等的子集。

这种方法的时间复杂度是 O(n x target},其中 n 是数组 nums 的长度,target 是数组 nums 的总和的一半。

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

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

相关文章

【Qt 学习笔记】Qt信号和槽的其他说明及Lambda表达式

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt信号和槽的其他说明及Lambda表达式 文章编号&#xff1a;Qt 学习笔记…

大数据知识合集之数据分析方法论

常用数据分析方法&#xff1a;描述统计、假设检验、信度分析、相关分析、方差分析、回归分析、聚类分析、判别分析、主成分分析、因子分析、时间序列分析等。 1、描述性统计分析 描述性统计分析是通过图表或数学方法&#xff0c;对数据资料进行整理、分析&#xff0c;并对数据…

头歌-机器学习 第16次实验 EM算法

第1关:极大似然估计 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握: 什么是极大似然估计; 极大似然估计的原理; 极大似然估计的计算方法。 什么是极大似然估计 没有接触过或者没有听过”极大似然估计“的同学…

开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

一、前言 Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念&#xff0c;特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习&#xff0c;模型可以更好地处理未知的情况和新任务&#xff0c;减少对大量标注数据的依赖&#xff0c;提高模型的…

PWM、通信、串口通信、UART、TTL、51单片机串口通信、定时器初值的计算公式

我要成为嵌入式高手之4月8日51单片机第三天&#xff01;&#xff01; ———————————————————————————— PWM 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是利用微处理器的数字输出来…

护眼台灯怎么选看哪些指标?兼顾性能与性价比护眼灯十大品牌推荐

对于长时间面对电子屏幕的上班族和学业负担重的学生族来说&#xff0c;他们的眼睛承受着巨大压力。加之不良的用眼习惯&#xff0c;导致近视人数不断增加。然而&#xff0c;良好的光线对眼睛健康至关重要。适宜的照明可以提供舒适的环境&#xff0c;减轻眼睛的负担。因此&#…

锂电池升降压转换利器:PW2224转换器,实现3.3V高效持续输出

描述&#xff1a; PW2224是一款专为锂电池供电设备设计的高效单电感降压-升压转换器。这款转换器能够在3V至4.2V的锂电池输入电压范围内工作&#xff0c;实现升降压模式自动切换&#xff0c;稳定输出3.3V电压&#xff0c;并持续提供高达1A的负载电流。此外&#xff0c;PW2224的…

栈的弹出压入弹出顺序

栈的压入弹出顺序 题目算法原理代码实现 题目 栈的压入弹出顺序 给定一个栈的压入顺序&#xff0c;然后再给定一个栈的弹出顺序&#xff0c;问这个两个顺序是否匹配 算法原理 定义一个栈s&#xff0c;我们先把栈的压入顺序数组的元素压入栈中&#xff0c;直到栈顶元素等于弹…

centos安装nginx php mysql redis mongodb 并配置kohana环境

安装nginx 43 wget http://nginx.org/download/nginx-1.9.9.tar.gz 44 tar -zxvf nginx-1.9.9.tar.gz 45 cd nginx-1.9.9 47 mkdir /work 48 ./configure --prefix/work/nginx-1.9.9 --with-pcre 49 cd /work/ 50 ls 51 cd /download/ 52 cd nginx-1.9.9 53 yum inst…

UE5、CesiumForUnreal实现加载建筑轮廓GeoJson数据生成白模功能

1.实现目标 在UE5.3中,通过加载本地建筑边界轮廓面GeoJson数据,获取底面轮廓和楼高数据,拉伸生成白模,并支持点选高亮。为防止阻塞Game线程,使用了异步任务进行优化,GIF动图如下所示: 其中建筑数量:128871,顶点索引数量:6695748,三角面数量:2231916,顶点数量:165…

Qt窗口的闪烁QWebEngineView

Qt窗口的闪烁QWebEngineView 1.使用了QWebEngineView2.崩溃3.切换页面闪屏4.Qt窗口切换导致的闪烁 1.使用了QWebEngineView 2.崩溃 解决方法&#xff1a;析构增加 delete m_webEngineView;m_webEngineView nullptr;3.切换页面闪屏 setWindowFlags(Qt::FramelessWindowHint);…

PaddleOCR 图片日期识别

目录 一 . 获取图片信息种对应坐标区域日期信息 &#xff08;类型为1&#xff1a;http链接 类型为 2本地图片路径&#xff09; 二 . ocr图片识别日期信息获取&#xff0c;调用获取图片区域相应位置方法 三 . 如有所需获取rtsp流回放格式 四 . 完整代码如下 &#xff08…

Oracle数据库部署

安装前设置 1&#xff1a;在windows中把需要的软件共享 2&#xff1a;linux中挂载共享&#xff0c;将所需软件全拷贝到usr/src中&#xff08;包括java和oracle&#xff09; [rootoracle~]# mkdir /oracle &#xff08;创建共享目录&#xff09; [rootoracle~]# mount -o user…

计算机网络-OSPF路由汇总

一、路由汇总 路由汇总又被称为路由聚合&#xff0c;即是将一组前缀相同的路由汇聚成一条路由&#xff0c;从而达到减小路由表规模以及优化设备资源利用率的目的&#xff0c;我们把汇聚之前的这组路由称为精细路由或明细路由&#xff0c;把汇聚之后的这条路由称为汇总路由或聚合…

高速开箱机在现代生产线中的角色与价值

在快节奏的现代工业生产中&#xff0c;高速开箱机已成为不可或缺的重要设备。它不仅大幅提升了生产线的效率&#xff0c;更在确保产品质量、降低成本、增强市场竞争力等方面发挥着重要作用。星派将详细探讨高速开箱机在现代生产线中的角色与价值。 一、高速开箱机的功能特点 高…

算法练习第五十一天| 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 309.最佳买卖股票时机含冷冻期 class Solution {public int maxProfit(int[] prices) {//dp[i][j]&#xff0c;第i天状态为j&#xff0c;所剩的最多现金为dp[i][j]/**dp[i][0] 持有股票状态dp[i][1] 保持保持卖出…

为什么学生很难真正学好嵌入式?

10几年前&#xff0c;我是读电气工程专业&#xff0c;学了很多东西&#xff0c;结构&#xff0c;电机、绘图&#xff0c;plc等等.. 其实&#xff0c;都没什么鸟用&#xff0c;出来还是像个废物。 后面我自学转了单片机开发&#xff0c;说句难听点&#xff0c;自己买个开发板都比…

实用工具系列-ADB使用方式

作者持续关注 WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;WPS二次开发QQ群:250325397&#xff09;&#xff0c;摸鱼吹牛嗨起来&#xff0…

睿尔曼超轻量仿人机械臂之在ROS里引用正逆解函数库

一、机械臂运动学正逆解说明 机械臂运动学就是根据未端执行器与所选参考坐标系之间的几何关系&#xff0c;确定末端执行器的空间位置和姿态与各关节变量之间的数学关系。包括正运动学 (Forward Kinematics)和逆运动学 (Inverse Kinematics)两部分。 机械臂运动分为关节空间运…

访问网站时IP被阻止?解决方法

相信许多人都曾遭遇过IP禁令的困扰&#xff1a;比如在尝试访问社交媒体、搜索引擎或电子商务网站时&#xff0c;突然发现自己被限制了访问权限&#xff1b;又或是自己的账号在毫无预兆的情况下被封禁。这些网络上的种种限制使得IP被封成为了一个常见的问题&#xff0c;让我们无…