当前位置: 首页 > 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;}
}

相关文章:

  • 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 事务:保障数据操作的原子性与一致性
  • wordpress网站建设教程/陕西疫情最新消息
  • 安徽省新天源建设公司网站/不花钱网站推广
  • bootstrap响应式网站/知名品牌营销案例100例
  • 好的网站具备条件/客源引流推广
  • app程序开发的公司/山东seo多少钱
  • 哪个网站做加盟的比较靠谱/企业网站推广方法实验报告