474-一和零(01背包)

力扣题目系列:474. 一和零 题目及示例 在计算机界中,我们总是追求用有限的资源获取最大的收益。 现在,假设你分别支配着 m 个0和 n 个1。另外,还有一个仅包含0和1字符串的数组。 你的任务是使用给定的m 个0和 n 个1,找到能拼出存在于数组中的字符串的最大数量。每个0和1至多被使用一次。 注意: 给定0和1的数量都不会超过100。 给定字符串数组的长度不会超过600。 示例 1: 输入: Array = ... 阅读详情

题目

给你一个二进制字符串数组 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 。

题解

class Solution {
    public int findMaxForm(String[] strs, int m, int n) {
        //dp[i][j]代表在i个0,j个1的限制下能够得到的最大子集的大小,当目标是0个0和0个1时没有分配方案
        int[][] dp=new int[m+1][n+1];
        for(String s:strs){
            int[] count=countOnesZeroes(s);
            for(int i=m;i>=count[0];i--){
                for(int j=n;j>=count[1];j--){
                    dp[i][j]=Math.max(dp[i][j],1+dp[i-count[0]][j-count[1]]);//i-此个String的0的个数
                }
            }
        }
        return dp[m][n];
    }
    public int[] countOnesZeroes(String s){
        int[] count=new int[2];
        for(int i=0;i<s.length();i++){
            count[s.charAt(i)-'0']++;
        }
        return count;
    }
}

笔记:

  1. 本题为有多维限制的0/1背包问题。
【Leetcode动态规划--01背包】416.分割等和子集 1049. 最后一块石头的重量 II 494. 目标和(求装满背包的方法数) 474.一和零 文章目录Leetcode10491.问题描述2.解决方案 Leetcode1049 1.问题描述 2.解决方案 没什么好说的,直接先证明(看成) 01 背包问题,然后直接dp就好,d代码sul上面有解析,这直接d上代码了 class Solution { public: int lastStoneWeightII(vector<int>& stones) { //1. int len=stones.size(); int su 阅读详情

相关推荐

接入 deepseek 实现AI智能问诊

必须包含user角色,用于传递用户输入。system角色可选,用于设置对话背景。多轮对话需要将历史记录添加到messages中。

weixin_51326478的博客 6544

java封装一个类CountNumber,包含一个方法public int[] count(String s), 统计每个数字在字符串出现的次数

封装一个类CountNumber,包含一个方法public int[] count(String s), 统计每个数字在字符串出现的次数,返回值是10个元素构成的数组,每个元素存储的是一个数字出现的次数.倒如:在执行完int[] count(" 12203AB3")之后, count[0]为 1, count[]为1, count(2)为2, coun[3)为2。封装执行主类。 主类: Count...

weixin_46292455的博客 1754

拆解人形机器人:核心硬件与驱动系统

本文深入解析人形机器人的核心硬件系统,将其类比为"骨骼+肌肉+神经"的集成体。重点介绍了三大关键组件:驱动单元(无框力矩电机和空心杯电机)、传动单元(谐波减速器和行星滚柱丝杠)以及感知单元(力矩传感器、编码器和IMU)。文章指出一体化关节模组正成为行业趋势,能够实现更紧凑的结构和更高的可靠性。同时分析了硬件价值量分布,强调丝杠、电机等部件是当前技术高地和成本重心。最后指出随着技术进步,机器人价值将更多向"大脑"和"神经"转移。

小明的博客 1531

leetcode:474. 一和零[01背包][动态规划]

【代码】leetcode:474. 一和零[01背包][动态规划]

2301_81570594的博客 363

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

基于C#的ASP.NET开发的党史学习网站课设

开展党史学习教育,就是要以史为镜、以史明志,把苦难辉煌的过去、日新月异的现在、光明宏大的未来贯通起来,在鉴往知来中砥砺前行,在乱云飞渡中把准航向,在凝心聚力中团结奋斗,共同创造新的历史伟业。登陆按钮与数据库进行连接,逻辑实现是如图3.1.3所示,自己定义一个SQL查询语句,将账号、密码放入SQL查询语句中,用sqlDataReader.HasRows语句进行逐一比较,找出结果,将用户名存入session并调用cookies,如果结果存在就关闭数据库,进行数据跳转,并弹出登陆成功的提示框,并关闭数据库。

m0_62408555的博客 975

【Leetcode】01背包问题-474. 一和零

【Leetcode】01背包问题-474. 一和零

qq_44653420的博客 249

YOLOv5改进之---EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU

本文主要针对yolov5的iou损失函数进行改进,主要涵盖EIoU,SIoU,AlphaIoU,FocalEIoU,Wise-IoU这几种损失

qq_41920323的博客 1467

【算法打卡day15(2026-03-03 周一)DP - 01背包问题】5-力扣474-一和零

本文介绍了力扣第474题"一和零"的动态规划解法。该问题被转化为二维费用的01背包问题,其中每个二进制字符串被视为具有0和1数量两个维度的"物品"。通过构建二维数组dp[i][j]表示最多使用i个0和j个1时的最大子集大小,采用倒序遍历的方式确保每个字符串只被考虑一次。最终dp[m][n]即为答案,时间复杂度为O(strs.lengthmn)。

仟墨(郑龙浩)的博客 330

20、微电网系统的系统框架、建模与控制架构解析

本文详细解析了微电网系统的系统框架、建模方法以及控制架构。文章首先介绍了在系统的系统(SoS)框架下,微电网如何通过微控制器(MC)和微电网中央控制器(MGCC)协调运行,并支持并网与孤岛模式下的高效能量管理。随后,针对微电网的关键组件,包括微涡轮机、光伏太阳能电池和风力涡轮机,提供了详细的数学建模分析。最后,探讨了微电网的控制架构设计,涵盖分层控制和共识控制策略,以实现系统的高效、稳定运行,满足日益增长的能源需求与市场要求。

elastic6hunter的博客 207

【AI大模型应用开发实战】大型语言模型评估指南白皮书(LLM Eval)

近年来,大型语言模型(LLM)在自然语言处理领域取得了重大进展,例如 GPT-3 和 Chat-GPT。这些模型经过大型数据集的训练,在文本相关任务中表现出卓越的能力,甚至超越了人类。本文将简要介绍如何验证 LLMs 性能的评估指标。自然语言处理(NLP)是人工智能的一个领域,涉及计算机和人类语言之间的交互。NLP 的基本任务之一是语言建模 (LM),它涉及构建统计模型来分析和生成自然语言。LM 已成为推进机器语言智能的关键方法,使机器能够执行机器翻译、情感分析和对话系统等任务。

AI天才研究院 1017

动态规划——01背包问题(力扣474: 一和零)

给定一个二进制字符串数组strs和两个整数m和n, 请找出并返回strs的最大子集长度, 该子集中最多有m个0和n个1(例如: strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3)

qq_40472852的博客 925

PMP–一、二、三模–分类–13.干系人管理

A:确认是否已制定沟通管理计划,使业务干系人认识到项目的成功之处。B:让业务干系人参加冲刺回顾会议。C:与发起人和关键干系人一起确定产品待办事项列表中的优先要务,以便交付商业利益。D:为关键干系人开展收尾调研。C。

stqer的博客 1418

474.一和零【01背包】

474.一和零 题目链接:力扣 给你一个二进制字符串数组 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"} ,

coolshyman的博客 125

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Leetcode 474. 一和零 动态规划 01背包问题

文章摘要 本文讨论了Leetcode 474题"一和零"的解法,这是一个二维背包问题的变种。题目要求在给定的字符串数组中选择一个子集,使得子集中0和1的总数分别不超过m和n,同时使子集尽可能大。文章提供了两种动态规划解法:1) 三维数组解法,使用dp[i][j][z]表示考虑前i个字符串时最多包含j个0和z个1的最大子集;2) 空间优化的二维数组解法,通过逆序更新避免覆盖。两种方法的时间复杂度均为O(lenmn),但第二种方法将空间复杂度从O(lenmn)优化到O(m*n)。

想买很多漂亮衣服但是买不起的博客 372

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

力扣记录:动态规划2背包问题(1)01背包——416 分割等和子集,1049 最后一块石头的重量II,494 目标和,474 一和零

力扣记录:动态规划2背包问题(1)01背包——416 分割等和子集,1049 最后一块石头的重量II,494 目标和,474 一和零

Kiwi_fruit的博客 492

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

01背包问题之LeetCode474一和零详解

01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是w[i],价值是v[i],求将哪些物品装入背包可使价值总和最大。 基本思路 01背包的特点有两个:一个是每件物品有且只有一个,二是每个物品可以选择放或者不放。 一般状态转移方程定义为:dp[i][j] = max ( dp[i-1][j],dp[i-1][j-w[i]]+v[i] ) 这里的dp[i][j] = n表示前...

hhqzz的博客 452

LeetCode 474. 一和零--01背包

一和零 给你一个二进制字符串数组 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 。 其他.

weixin_43918046的博客 192

LeetCode 474. 一和零(二维01背包)

题目链接:https://leetcode-cn.com/problems/ones-and-zeroes/ 题意:N(0<=N<=600)个仅由“0”和“1”组成的字符串,现在有m(0<=m<=100)个0和n(0<=n<=100)个1。问最可以组成多少个字符串。 思路:典型的01背包问题,只不过一个物品占用两类空间,双重循环即可。时间复杂度O(N*m*n)。 public: struct node{ int cnt0,cnt1; }a[610]; i

birdmanqin的博客 176

LeetCode 474 一和零【01双重背包】

01双重背包 定义f(i,j,k)f(i,j,k)f(i,j,k)表示在考虑第111个至第iii个物品后,且使用不超过jjj个0和kkk个1的条件下,能够选取的子集的最大数目。 枚举所有状态,转移情况无非就是选取当前字符串与否,转移方程: f(i,j,k)=max⁡(f(i−1,j,k),f(i−1,j−cnt[i][0],k−cnt[i][1]))f(i,j,k)=\max(f(i-1,j,k),f(i-1,j-cnt[i][0],k-cnt[i][1]))f(i,j,k)=max(f(i−1,j,k),

Yucohny 261

474. 一和零 类似01背包问题

解题思路 01背包问题,有n件物品,放入容量为V的背包内,每件物品的体积为a[i]a[i]a[i],价值为v[i]v[i]v[i],求背包内可装成的最大的价值。 状态设置为dp[i][j]dp[i][j]dp[i][j]代表前i件物品放入容量为j的背包内,我们可以得到的最大的价值,很容易可以得到状态转移方程,这个网上的题解很多,这里不再赘述。 本题,有一个字符串数组,数组的每一个元素都是一个01的字符串,现在要求从这个数组中选出若干字符串,使得这个字符串的0的个数不超过m,1的个数不超过n,求可以选出的字

shen253135371的博客 219

474一和零(01背包、动态规划)

1、题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 提示: 1 <= strs.length <= 600 1 <= strs[i].length <= 100 strs[i]仅由'0' 和'1' 组成 1 <= m, n <= 100 2、示例 输入:str...

Revendell的博客 192

Leetcode 474 一和零【动态规划01背包问题】

中等题 属于动态规划中的01背包问题,但是这里比较特殊,由多层背包组成;

qq_43456497的博客 273

代码随想录算法训练营day43 | 1049. 最后一块石头的重量 II ,494. 目标和,474.一和零,01背包问题总结

思路:尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就将本题化解成01背包问题了。此时背包容量是sum/2,物品重量和价值都等于数组中的每个数字。此时我们讲解了0-1背包的多种应用,纯 0 - 1 背包是求 给定背包容量 装满背包 的最大价值是多少。输出dp[dp.length-1];416.分割等和子集是求 给定背包容量,能不能装满这个背包。输出dp[sum/2] == sum/2;1049.最后一块石头的重量 II是求 给定背包容量,尽可能装,最多能装多少。

2301_77450803的博客 637

Leetcode|01背包|474. 一和零(二维01背包)

1 动态规划(二维01背包) 【dp[i][j]数组含义】:容量0的个数最多为i且1的个数最多为j的情况下,两个维度容量的背包下最多的子集数 【状态转移方程】:dp[i][j] = max(dp[i][j], dp[i - cont0][j - cont1] + 1) class Solution { public: int findMaxForm(vector<string>& strs, int m, int n) { int size = strs.siz.

SL_World的博客 246

代码随想录算法训练营 | day43 动态规划 01背包,1049.最后一块石头的重量Ⅱ,494.目标和,474.一和零

题目:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回 0。

weixin_45011378的博客 143
上一篇: 494-目标和(01背包)
下一篇: 5-最长回文子串
codrab
博客等级 码龄10年 15粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codrab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值