分割等和子集

devtools/2024/9/24 13:18:48/

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

1、自己写的shit山代码;

class Solution {public boolean canPartition(int[] nums) {int len = nums.length,sum = 0;if(len==1)return false;for(int i : nums){sum+=i;}if(sum%2!=0)return false;int target = sum/2;//计算背包容量int[][] dp = new int[len][target+1];//把容量为0的情况也算上for(int j = 1;j < target+1;j++){//初始化背包if(nums[0]>j){//判断当前容量是否装得下第一个物品dp[0][j] = 0;}else{dp[0][j] = nums[0]; } }for(int i = 1;i < len;i++){for(int j = 1;j < target+1;j++){//计算最大值int a = Math.max(dp[i-1][j],j-nums[i]>=0?dp[i-1][j-nums[i]]+nums[i]:0);int b = Math.min(dp[i-1][j],j-nums[i]>=0?dp[i-1][j-nums[i]]+nums[i]:0);if(a>target){//判断是否超出界限dp[i][j] = b;}else{dp[i][j] = a;}}}for(int i = 0;i < len;i++){//寻找是否有答案if(dp[i][target]==target){return true;}}return false;}
}

2、三叶的题解

class Solution {public boolean canPartition(int[] nums) {int n = nums.length;//「等和子集」的和必然是总和的一半int sum = 0;for (int i : nums) sum += i;int target = sum / 2;// 对应了总和为奇数的情况,注定不能被分为两个「等和子集」if (target * 2 != sum) return false;// 将「物品维度」取消int[] f = new int[target + 1];for (int i = 0; i < n; i++) {int t = nums[i];// 将「容量维度」改成从大到小遍历for (int j = target; j >= 0; j--) {// 不选第 i 件物品int no = f[j];// 选第 i 件物品int yes = j >= t ? f[j-t] + t : 0;f[j] = Math.max(no, yes);}}// 如果最大价值等于 target,说明可以拆分成两个「等和子集」return f[target] == target;}
}


http://www.ppmy.cn/devtools/32981.html

相关文章

iOS - 编译最新 FFMpeg(7.0) SDK

文章目录 一、数据代码准备1、下载 FFMpeg 源码包2、下载 编译脚本3、调整编译脚本二、安装依赖1、安装 brew2、gas-preprocessor3、yams其他:x264、FDK-AAC三、运行编译1、运行脚本2、结果四、集成到 iOS 工程五、报错信息等一、数据代码准备

JSON解析

JSON简介 JSON是一种轻量级的数据交换格式&#xff0c;它采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言&#xff0c;易于人的阅读和编写&#xff0c;同时也有利于机器解析和生成&#xff0c;并有效地提升网络传输效率…

分割回文串(力扣131)

解题思路&#xff1a;仍就是上递归三部曲&#xff0c;但于此同时要明白此时的index就可以作为切割回文串的线了 具体代码如下&#xff1a; class Solution { private: vector<vector<string>> result; vector<string> path; // 放已经回文的子串 void back…

关机恶搞小程序

1. system("shutdown")的介绍 当system函数的参数是"shutdown"时&#xff0c;它将会执行系统的关机命令。 具体来说&#xff0c;system("shutdown")的功能是向操作系统发送一个关机信号&#xff0c;请求关闭计算机。这将触发操作系统执行一系列…

求矩阵对角线元素之和(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int sum 0;int a[3][3] { 0 };//获取数组a的值&#xff1b;printf(&qu…

c++多线程2小时速成

简介 c多线程基础需要掌握这三个标准库的使用&#xff1a;std::thread,std::mutex, andstd::async。 1. Hello, world #include <iostream> #include <thread>void hello() { std::cout << "Hello Concurrent World!\n"; }int main() {std::th…

Pop_OS 个人配置

Pop_OS 个人配置 系统优化 DNS 配置 小技巧&#xff1a; 使用 阿里云 免费 DNS 可以有效解决 GitHub 访问问题 IP4 223.5.5.5 223.6.6.6IP6 2400:3200::1 2400:3200:baba::1Ubuntu 镜像 使用 华为云 提供的 Ubunut 镜像 sudo sed -i "shttp://apt.pop-os.orghttp://…

OceanBase 分布式数据库【信创/国产化】- OceanBase 平台产品 - 迁移评估工具 OMA

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 平台产品 - 迁移评估工具 OMA前言OceanBase 数据更新架构OceanBase 平台产品 - 迁移评估工具 OMA兼容性评估性能评估导出 OceanBase 数据库对象和 SQL 语句OceanBase 分布式数据库【信创/国产…