474. 一和零(动态规划)

Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) 目录 Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) 一、简单介绍 二、一些专有项简介 Entity Context Group Collector Matcher System Feature 三、注意实现 四、ECS 的下载 Github 上下载 Unity Asset Store 中下载 U... 阅读详情
/**
 * 474. 一和零
 * @author wsq
 * @date 2020/10/11
	计算机界中,我们总是追求用有限的资源获取最大的收益。
	现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。
	你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。
	
	示例 1:
	输入: strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3
	输出: 4
	解释: 总共 4 个字符串可以通过 5 个 0 和 3 个 1 拼出,即 "10","0001","1","0" 。

	示例 2:
	输入: strs = ["10", "0", "1"], m = 1, n = 1
	输出: 2
	解释: 你可以拼出 "10",但之后就没有剩余数字了。更好的选择是拼出 "0" 和 "1" 。
	
	链接:https://leetcode-cn.com/problems/ones-and-zeroes
 */
package com.wsq.dp;

public class FindMaxForm {
	/**
	 *	类似背包问题,不过这里是两个容器,按照原始的背包问题去解决的话
	 *	这里我们建立动态规划矩阵应该是个3维的,但是考虑到后一种情况的只和前一种情况的相关,
	 *	因此,这里将表示物品的维度给省略了
	 * @param strs
	 * @param m
	 * @param n
	 * @return
	 */
	public int findMaxForm(String[] strs, int m, int n) {
		int[][] dp = new int[m + 1][n + 1];
		for(String str: strs) {
			int[] count = countZeroesAndOnes(str);
			for(int i = m; i >= count[0]; i--) {
				for(int j = n; j > count[1]; j--) {
					dp[i][j] = Math.max(1 + dp[i-count[0]][j-count[1]], dp[i][j]);
				}
			}
		}
		return dp[m][n];
	}
	
	public int[] countZeroesAndOnes(String str) {
		int[] ans = new int[2];
		for(char c:str.toCharArray()) {
			ans[c-'0']++;
		}
		return ans;
	}
	
	public static void main(String[] args) {
		String[] strs = {"10", "0001", "111001", "1", "0"};
		int m = 3;
		int n = 2;
		FindMaxForm fm = new FindMaxForm();
		int ans = fm.findMaxForm(strs, m, n);
		System.out.println(ans);
	}
}

AI智能体丨使用Coze一键生成道教国学智慧语录视频,涨粉快好变现!(附保姆级教程) 该教程详解如何通过自动化流程批量制作道家国学视频,将晦涩哲理转化为轻量化内容,适配短视频平台需求。 阅读详情

相关推荐

Python实战:5分钟搞定N-CMAPSS航空发动机数据集解析(附完整代码)

本文提供了一份针对N-CMAPSS航空发动机数据集的快速解析实战指南。通过Python的h5py和Pandas库,详细演示了如何高效读取HDF5格式文件、理解数据结构、提取关键特征(如传感器数据与剩余使用寿命RUL),并整合为可用于预测性维护分析的DataFrame,帮助研究者和工程师快速上手这一重要的工业时序数据集。

weixin_29083373的博客 281

474. 一和零

2021-06-06 LeetCode每日一题 链接:https://leetcode-cn.com/problems/ones-and-zeroes/ 标签:动态规划、01背包问题 题目 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 输入:strs = ["10", "0001", "111001", "1", "0

秃头哥编程 304

解锁Cherry Studio高阶玩法:用MCP实现自动化测试与数据爬取

本文深入探讨了如何利用MCP协议与Cherry Studio结合,实现自动化测试与数据爬取的高阶应用。通过Playwright等工具的MCP集成方案,详细解析了自动化测试流水线构建和智能爬虫系统开发的关键技术,显著提升工程效率和系统适应性。

defi6farmer的博客 275

Leetcode 474. 一和零

474. 一和零 思路 典型的背包不超过容积的变种问题,相比于普通背包多了一维。 类比地,这样定义状态f[i,j,k]f[i, j, k]f[i,j,k]: 从前i个字符串中选,0的总数不超过j,1的总数不超过k的选取集合数的最大值。 由此可以得到状态转移方程: f[i,j,k]=Math.max(f[i−1,j,k],f[i−1,j−nums[i][0],k−nums[i][1]])f[i, j, k] = Math.max(f[i - 1, j, k], f[i - 1, j - nums[i][0],

qq_20067165的博客 434

算法-基于MACD的Adaboost股价涨跌预测模型

MACD是一个指标,具体用法是MACD>0看涨,反之看跌,果真是这样的吗?由于所有的技术指标都基于对历史数据的统计,指标的滞后性也就难免,有时候MACD明明大于0,股价仍然跌,有时候macd小于0,股价仍然涨。 本文基于Adaboost算法提出了一种基于macd的线性阀值分类器作为若分类器,通过在限定的解空间内寻找使得错误率最小的阀值和偏置,这样做避免了训练若分类器的复杂性,经验证,这种方法有效。

mtaxot的博客 8023

六轴机械臂正逆解计算

机械臂运动学就是。包括(Forward Kinematics)和(InverseKinematics)两部分。正运动学就是逆运动学则是关节变量->机械臂末端执行器的姿势=正向运动学机械臂未端执行器的位姿->关节变量=逆向运动学。

gaoxiaochan的博客 1万+

【LeetCode】动态规划—474. 一和零(附完整Python/C++代码)

一和零 是一个典型的 0-1 背包问题。给定若干个仅由 0 和 1 组成的二进制字符串,再给定两个整数 m 和 n,表示最多可以包含的 0 和 1 的数量。要求通过选取若干个字符串,使得这些字符串的总 0 和 1 的数量不超过 m 和 n,并且在这些条件下选取的字符串数量最多。

Albert_Lsk的博客 1063

STM32CubeIDE之SHT3X温湿度传感器移植HAL库

有了前面的OLED的学习,这个学习起来也很快。 分以下几步走 1.你要有个温度传感器,SHT3X这个型号的,因为我要讲这个 2.你要有个STM32开发板(我用的是STM32L431RCT) 3.顺便找台电脑下载一个STM32CubeIDE 4.简单的找一个SHT3X的驱动,我是去某宝嫖的,一般卖这个的都有,这个驱动分两个文件,是.c和.h的,我直接把这两个放在下边 读了我上一篇的人,看这个应该很熟悉吧,一样的套路,学习方法是一样的,你就照搬就行 下面是sht3x.c的原文档,里面有个CRC..

qq_47736089的博客 2316

动态规划:目标和/一和零

思路: 既然为target,那么就一定有 left组合 - right组合 = target。left + right等于sum,而sum是固定的。公式来了, 。target是固定的,sum是固定的,left就可以求出来。此时问题就是在集合nums中找出和为left的组合。 再回归到01背包问题,为什么是01背包呢?因为每个物品(题目中的1)只用一次!这次和之前遇到的背包问题不一样了,之前都是求容量为j的背包,最多能装多少。本题则是装满有几种方法。其实这就是一个组合问题了。1确定dp数组以及下标的含义 d

sueong的博客 294

从开票数据到 ML81N 一键过账:用 ABAP BAPI 批量创建 Service Entry Sheet 的落地方案

摘要:SAP ESM场景中,服务履约确认通常通过ML81N事务码创建服务条目表(SES)完成。本文介绍如何基于开票数据(VBRK/VBRP)自动生成SES:首先通过BAPI_PO_GETDETAIL获取采购订单服务行结构,然后使用BAPI_ENTRYSHEET_CREATE创建SES并覆盖开票数量与金额,最后调用BAPI_ENTRYSHEET_RELEASE自动释放。解决方案包含ALV交互界面、批量处理逻辑和结果跳转功能,实现从人工录入到自动化处理的转变。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 330

基于YOLOv11的建筑图纸物体检测系统设计与实现

包含多种建筑平面图,标注了墙体、门窗等元素:CAD格式的建筑图纸数据集:专门针对建筑元素的标注数据集自定义数据集:使用LabelImg等工具自行标注的建筑图纸本文以FloorPlanDataset为基础,结合部分自定义标注数据构建混合数据集。wall (墙体)door (门)window (窗)stair (楼梯)furniture (家具)text (文字标注)dimension (尺寸标注)column (柱子)

YOLO 536

155、【动态规划】leetcode ——474. 一和零:三维数组+二维滚动数组(C++版本)

如果是从小到大遍历的话,虽然第一次计算的结果会使i-1时的情况,但后续继续遍历时,由于j - zeros和k - ones可能会出现之前在i时遍历过程中已经被更新的情况,导致重复计数。而如果从大到小遍历的话,就可以保证每次遍历时都是按照i-1时的情况计算,并且在后续遍历时不会出现重复计数。,则该题就可以转化为01背包问题,其中m个0和n个1,可看作一个背包中两个不同维度的表示。本题是要在已有的字符串中,找到给定的m个0和n个1,组出最大的子集。因为一个字符串代表一个物品,其重量为1,

STAR GAME 710

六种光耦综合对比——《器件手册--光耦》

可控硅输出光耦(SCR Optocoupler)是一种特殊的光电耦合器,由红外发光二极管(LED)和双向可控硅(SCR)组成,用于实现输入和输出之间的电气隔离和信号传输。逻辑输出光耦是一种高效、可靠的数字信号隔离和电平转换器件,通过电气隔离和逻辑电平输出,确保了系统的安全性和信号的稳定性。固态继电器(可控硅输出,SSR)是一种无触点电子开关设备,利用可控硅(SCR或Triac)作为主要开关元件,通过光耦合器实现输入和输出之间的电气隔离。光耦作为一种成熟的电气隔离器件,在电子电路设计中具有重要的地位。

XU157303764的博客 1727

刷题记录 动态规划-17: 474. 一和零

难度:中等给你一个的数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。true数组可以分割成 [1, 5, 5] 和 [11]。false数组不能分割成两个元素和相等的子集。

weixin_44610684的博客 311

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

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

2301_81570594的博客 362

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【LeetCode】474.一和零 #动态规划

【leetcode】474.一和零

榎本径的博客 166

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

力扣-动态规划-474. 一和零

力扣-动态规划-474. 一和零 494. 目标和 题目描述 给你一个二进制字符串数组 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”,“000

qianxunsiyue的博客 454

LeetCode 474.一和零 动态规划 一维dp(两个维度)

其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"}。最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。以输入:["10","0001","111001","1","0"],m = 3,n = 3为例。(5)遍历字符串数组,获取到"1",我们可以计算出x个"0" 和 y个"1"(6)遍历字符串数组,获取到"0",我们可以计算出x个"0" 和 y个"1"这就是一个典型的01背包问题!

呵呵哒!的博客 297

Leetcode之动态规划(DP)专题-474. 一和零(Ones and Zeroes)

Leetcode之动态规划(DP)专题-474. 一和零(Ones and Zeroes) 在计算机界中,我们总是追求用有限的资源获取最大的收益。 现在,假设你分别支配着m个0和n个1。另外,还有一个仅包含0和1字符串的数组。 你的任务是使用给定的m个0和n个1,找到能拼出存在于数组中的字符串的最大数量。每个0和1至多被使用一...

denghan1065的博客 215

动态规划 Leetcode 474 一和零

要点:1.背包容量为二维,物品重量为数组元素长度,价值为1;3.数组初始化也仿照01背包问题,没有负数则数组值初始化为0。2.仍是01背包问题,递推公式仿照。

weixin_46930685的博客 668

代码随想录算法训练营day43|第九章 动态规划part05:1049. 最后一块石头的重量 II、494. 目标和、474.一和零

还有一点,初始化dp数组的时候,必须将dp[0]设置为1,虽然总和为0的方法数不一定是1(例如集合[0, 0 ,0]),即使初始化为1,最后也可能会增加,但如果初始化为0,dp数组就永远都是0(因为遍历背包是倒序遍历,而且除0外所有都初始化为0,所以如果该容量存在方法数,那么一定是从dp[0]开始加起来的,dp[0]=0,那加来加去都只能是0)。这道题需要间接考虑,可以转化为能不能将整个数组尽量分成两个和一样的分数组,这样求最后的石头的质量就是求两个分数组的和之间的最小差值,就变成了和。

mrmobi的博客 1024

算法学习——LeetCode力扣动态规划篇3(494. 目标和、474. 一和零、518. 零钱兑换 II)

算法学习——LeetCode力扣动态规划篇3(494. 目标和、474. 一和零、518. 零钱兑换 II)

拉依达不拉跨的博客 1162

leetcode474. 一和零(动态规划-java)

其他满足题意但较小的子集包括 {“0001”,“1”} 和 {“10”,“1”,“0”}。解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4。输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3。输入:strs = [“10”, “0”, “1”], m = 1, n = 1。解释:最大的子集是 {“0”, “1”} ,所以答案是 2。process(不选)

SP_1024的博客 741

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

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

qq_40472852的博客 925

代码随想录 Day 41 | 【第九章 动态规划 part 04】1049. 最后一块石头的重量 II、494. 目标和、474.一和零

(1)定义dp数组及初始化:初始化一个二维动态规划数组 dp,大小为 (m+1) x (n+1),dp[i][j] 表示在至多有 i 个 '0' 和 j 个 '1' 的条件下,可以选择的最大字符串数量;(2)递推公式:本题中石头的重量就是石头的价值,递推公式为dp[j] = max(dp[j], dp[j-stones[i]]+stones[i])(4)dp数组递推公式:dp[i][j] = max(dp[i][j], dp[i-zero][j-one] + 1)

loveJava17的博客 1250

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)。

想买很多漂亮衣服但是买不起的博客 371
上一篇: 416. 分割等和子集
下一篇: 198. 打家劫舍(动态规划)
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值