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

【Hot100】LeetCode—416. 分割等和子集

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐152. 乘积最大子数组——题解思路
  • 3- ACM 实现


题目

  • 原题连接:416. 分割等和子集

1- 思路

理解为背包问题

  • 思路: 能否将均分的子集理解为一个背包,比如对于 [1,5,11,5],判断能否凑齐背包为 11 的容量
  • 在本题中,背包中的物品是不可以重用的

1.定义 dp 数组

  • dp[j] 代表容量为 j 的数组的最大价值,在本题中,容量就是价值。重量为 5 的石头,价值就是 5
  • 可划分条件dp[target] == target 也就是装满 target 的最大价值刚好是 target 这时候就可以划分

2.递推公式

  • dp[j] = Math.max(dp[j],dp[j-weight[i]]+values[i]) ——> 在本题目中 weightvalue 是一个东西

3.初始化


2- 实现

⭐152. 乘积最大子数组——题解思路

在这里插入图片描述

class Solution {public boolean canPartition(int[] nums) {// 求targetint sum = 0;for(int s:nums){sum+=s;}//总和为奇数,不能平分if(sum % 2 != 0) return false;int target = sum / 2;// 1. 定义dpint[] dp = new int[target+1];// 2. 递推公式// dp[j] = Math.max(dp[j],dp[j-weight[i]]+value[i]);// 3.初始化,都为 0dp[0] = 0;// 4. 先遍历物品,后遍历背包(逆序)for(int i = 0 ;i < nums.length;i++){for(int j = target;j>=nums[i];j--){dp[j] = Math.max(dp[j],dp[j-nums[i]]+nums[i]);if(dp[j] == target){return true;}}}return false;}
}

3- ACM 实现

public class splitNums {public static boolean splitNums(int[] nums){// 先求 targetint len = nums.length;int sum = 0;for(int i:nums){sum+=i;}if(sum%2==1) return false;int target = sum/2;// 1. 定义 dp 数组int[] dp = new int[target+1];// 2. 递推公式// dp[j] = Math.max(dp[j],dp[j-weight[i]]+value[i]);dp[0] = 0;// 3.初始化// 4. 遍历顺序,先遍历物品后遍历背包for(int i = 0 ; i < nums.length;i++) {for (int j = target; j >= nums[i]; j--) {dp[j] = Math.max(dp[j], dp[j - nums[i]] + nums[i]);if (dp[j] == target) {return true;}}}return false;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入数组长度");int n = sc.nextInt();int[] nums = new int[n];for(int i = 0 ; i < n ; i++){nums[i] = sc.nextInt();}System.out.println("结果是"+splitNums(nums));}
}
http://www.lryc.cn/news/409407.html

相关文章:

  • 前端开发知识-vue
  • 【嵌入式硬件】快衰减和慢衰减
  • C语言 | Leetcode C语言题解之第275题H指数II
  • 速盾:网络安全和 CDN 之间的关系是怎样的?
  • 数据库安全:MySQL安全配置,MySQL安全基线检查加固
  • 【SpringBoot】参数传递
  • Unity 骨骼动画(Skinned Mesh Renderer): 角色动画的高级渲染
  • 花几千上万学习Java,真没必要!(三十四)
  • 【代码】Python3|Scrapy框架初探(汽车之家大连市二手车车辆数据爬取、清洗与可视化)
  • C#中的new以及类
  • Hbase简介和快速入门
  • 【AI落地应用实战】Amazon Bedrock +Amazon Step Functions实现链式提示(Prompt Chaining)
  • vue Ref 和 Reactive 原理解析
  • 【人工智能】Transformers之Pipeline(六):图像分类(image-classification)
  • 编程语言漫谈之「初始化与赋值」——以C++和汇编语言为示例
  • windows使用ssh-agent管理私钥
  • PostgreSQL 之 to_timestamp函数
  • USB3.0的等长要求到底是多少?
  • 力扣高频SQL 50题(基础版)第二十五题
  • 【C++题解】1581. 马里奥的银币1
  • system和popen函数的异同点
  • Python小工具之httpstat网络分析
  • 挑战房市预测领头羊:KNN vs. 决策树 vs. 线性回归
  • Docker 基础知识
  • 视频主题Qinmei 3.0视频站源码_WordPress影视视频主题/附详细安装教程
  • 数字看板:跨行业需求下的创新与升级
  • 02、爬虫数据解析-Re解析
  • 掀桌子了!原来是咱们的大屏设计太酷,吓着前端开发老铁了
  • JavaScriptfor循环的树形菜单栏·
  • easyExcel 3.x以上版本导入数据后,再把错误信息导出,外加自定义RGB背景色、行高、宽度等