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

力扣-416.分割等和子集

题目描述

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

class Solution {public boolean canPartition(int[] nums) {int sum = 0;for(int i = 0; i < nums.length; i++){sum += nums[i];}if(sum % 2 == 1)return false;int target = sum / 2;int[] dp = new int[target+1];//dp数组的含义是大小为j的背包最多可以装多少for(int i = 0; i < nums.length; i++){//先遍历物品,再遍历背包for(int j = target; j >=1; j--){//从后往前遍历,保证每个物品只用一次if(j-nums[i]>=0)dp[j] = Math.max(dp[j], dp[j-nums[i]]+nums[i]);}}return dp[target]==target;}
}

小结:刚开始考虑回溯做这道题如下,非常直观而且容易想到,结果超时了

class Solution {int sum = 0;boolean judge = false;void backtracking(int[] nums, int target, int startIndex){if(sum == target){judge = true;return;}for(int i = startIndex; i < nums.length; i++){sum += nums[i];backtracking(nums, target, i+1);sum -= nums[i];}}public boolean canPartition(int[] nums) {int sum = 0;for(int i = 0;i<nums.length;i++){sum+=nums[i];}if(sum%2==1){return false;}int target = sum/2;backtracking(nums,target,0);return judge;}
}
http://www.dtcms.com/a/253739.html

相关文章:

  • ArkUI-X跨平台技术落地-华为运动健康(二)
  • k8s中pod有哪些状态?
  • python学智能算法(十二)|机器学习朴素贝叶斯方法初步-拉普拉斯平滑计算条件概率
  • 深度学习:人工神经网络之参数初始化和神经网络搭建
  • Transformer-BiGRU、Transformer、CNN-BiGRU、BiGRU、CNN五模型多变量时序预测
  • 深入ZGC并发处理的原理
  • docker中部署gitlab
  • 实时中值滤波 + 低通滤波 示例程序(STM32环境)
  • 【力扣 中等 C】2. 两数相加
  • PostgreSQL的扩展autoinc
  • C++二叉树进阶面试题
  • 热蛋白质组学分析技术在现代生命科学中的应用领域探析
  • mysql 根据查询语句创建表语句
  • 游戏行业对于服务器类型该怎样进行选择
  • Karate UI 基本概念之一
  • 【网工】华为配置专题进阶篇①
  • 【Java_EE】设计模式
  • 502 Bad Gateway:服务器作为网关或代理时收到无效响应处理方式
  • [pyvips] 枚举类型 | 错误处理(c->py)
  • 深入理解 MySQL 事务:保障数据操作的原子性与一致性
  • C#List的join查询
  • 分布式——分布式系统设计二——幂等性详解
  • 大事务导致数据库连接池耗尽分析与解决方案
  • 250618-通过Artifacts功能集成Open-WebUI与Gradio
  • Docker PowerJob
  • Docker搭建RabbitMQ集群环境
  • less-9-基于时间的GET单引号盲注
  • 客户端软件开发技术选择、填空解析
  • css 制作一个可以旋转的水泵效果
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | IncrementingCounter(递增计数器)