当前位置:网站首页>LeetCode_474_一和零
LeetCode_474_一和零
2022-07-29 19:31:00 【Fitz1318】
题目链接
题目描述
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。
请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。
如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。
示例 1:
输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3
输出:4
解释:最多有 5 个 0 和 3 个 1 的最大子集是 {
"10","0001","1","0"} ,因此答案是 4 。
其他满足题意但较小的子集包括 {
"0001","1"} 和 {
"10","1","0"} 。{
"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。
示例 2:
输入:strs = ["10", "0", "1"], m = 1, n = 1
输出:2
解释:最大的子集是 {
"0", "1"} ,所以答案是 2 。
提示:
1 <= strs.length <= 6001 <= strs[i].length <= 100strs[i]仅由'0'和'1'组成1 <= m, n <= 100
解题思路
动态规划
- str数组里面的元素相当于物品,每个物品都只有一个
- m和n相当于两个维度的背包
动态规划五部曲
确定
dp数组和下标的含义dp[i][j]:最多有i个0和j个1的str的最大子集的大小
确定递推公式
dp[i][j] = Math,max(dp[i][j],dp[i - num0][j - num1] + 1)
dp数组初始化
- 因为物品价值不会是负数,所以初始为0即可
确定遍历顺序
- 外层for循环遍历物品,内层for循环从后往前遍历背包容量
举例推到dp数组

AC代码
class Solution {
public int findMaxForm(String[] strs, int m, int n) {
int[][] dp = new int[m + 1][n + 1];
int num0;
int num1;
dp[0][0] = 0;
for (String str : strs) {
num0 = 0;
num1 = 0;
for (char c : str.toCharArray()) {
if (c == '0') {
num0++;
} else {
num1++;
}
}
for (int i = m; i >= num0; i--) {
for (int j = n; j >= num1; j--) {
dp[i][j] = Math.max(dp[i][j], dp[i - num0][j - num1] + 1);
}
}
}
return dp[m][n];
}
}
边栏推荐
猜你喜欢

【Autosar vLinkGen 链接器脚本生成器】

Flink1.15源码阅读flink-clients之GenericCLI、flinkYarnSessionCLI和DefaultCLI

Kubernetes:(四)常用命令

虚假新闻检测论文阅读(六):A Deep Learning Model for Early Detection of Fake News on Social Media

大疆MID 360

华为云14天鸿蒙设备开发-Day9网络应用开发

低代码搭建高效管理房屋检测系统案例分析

【目标检测】Generalized Focal Loss V2

不用Swagger,那我用啥?

C language advanced enumeration and joint
随机推荐
【AutoSAR 八 OS】
微信支付接口
OAuth2认证
【AutoSAR 四 BSW概述】
经验分享|编写简单易用的在线产品手册小妙招
UE4选不中半透明物体(半透明显示快捷键是啥)
cpolar应用实例之助力航运客户远程办公
要卖课、要带货,知识付费系统帮你一步搞定!
论文写作全攻略|一篇学术科研论文该怎么写
虚假新闻检测论文阅读(六):A Deep Learning Model for Early Detection of Fake News on Social Media
exdark数据集转yolo格式(仅供参考)
Flink1.15源码阅读flink-clients之GenericCLI、flinkYarnSessionCLI和DefaultCLI
MySQL 中的反斜杠 \\,怎么能这么坑?
Typescript使用修饰器混合方法到类
软件测试面试屡屡失败,面试官总是说逻辑思维混乱,怎么办?
UDPNM测试技术分享
TDengine 落地协鑫能科,数百亿数据压缩至 600GB
OpenCV - 图像二值化处理 腐蚀膨胀 边缘检测 轮廓识别
无代码开发平台权限设置入门教程
并发编程学习笔记 之 常用并发容器的概念及使用方法