LeetCode:474.一和零

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!
代码随想录
LeetCode: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"} ,因此答案是 4 。

其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"} 。{"111001"} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。

示例 2:

输入:strs = ["10", "0", "1"], m = 1, n = 1

输出:2

解释:最大的子集是 {"0", "1"} ,所以答案是 2 。

  • 0-1背包求的是背包容量为j能装的最大价值
  • 分割等和子集求的是能否装满容量为target的背包
  • 最后一块石头的重量求的是容量为target的背包能装的最大重量是多少
  • 目标和求的是容量为target的背包装满有多少种方式,递推公式:dp[j] += dp[j - nums[i]]
  • 一和零求的是当背包容量是二维的时候能最多装多少个元素
  • 本题可以将m个0,n个1看成一种特殊的容器,可以直接转化为求这种特殊的容器最多能装满多少个元素
  • dp[i][j]i个0,j个1时最多能装dp[i][j]个元素
  • 递推公式:dp[i][j] = Math.max(dp[i][j], dp[i - zeroNum] + dp[j - oneNum] + 1,即不选当前元素时的值 和 选当前元素的值两种情况下取最大值,dp[i - zeroNum][j - oneNum] + 1意思是:先预留足够的空间,然后在加上当前的元素的个数1
  • 这里面背包的容量是二维的,需要同时考虑01的个数,而之前的0-1背包问题都是一维的
java 复制代码
	public int findMaxForm(String[] strs, int m, int n) {
        int[][] dp = new int[m + 1][n + 1];
        int oneNum, zeroNum;
        for (String str : strs) {
            oneNum = 0;
            zeroNum = 0;
            for (char ch : str.toCharArray()) {
                if (ch == '0') {
                    zeroNum++;
                } else {
                    oneNum++;
                }
            }
            for (int i = m; i >= zeroNum; i--) {
                for (int j = n; j >= oneNum; j--) {
                    dp[i][j] = Math.max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);
                }
            }
        }
        return dp[m][n];
    }
相关推荐
喜欢吃燃面9 小时前
算法竞赛中的堆
c++·学习·算法
b***66619 小时前
Spring Boot 整合 Apollo 配置中心实战
java·spring boot·后端
资深web全栈开发9 小时前
LeetCode 1590:使数组和能被 p 整除(前缀和 + 哈希表优化)
算法·leetcode·前缀和·算法优化·哈希表·go 语言·取模运算
CoderYanger9 小时前
递归、搜索与回溯-综合练习:27.黄金矿工
java·算法·leetcode·深度优先·1024程序员节
zs宝来了9 小时前
HOT100系列-堆类型题
数据结构·算法·排序算法
Christo39 小时前
ICML-2019《Optimal Transport for structured data with application on graphs》
人工智能·算法·机器学习·数据挖掘
vx_vxbs669 小时前
【SSM高校普法系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
android·java·python·mysql·小程序·php·idea
张较瘦_9 小时前
Springboot3 | ResponseEntity 完全使用教程
java·springboot·开发
毕设源码-郭学长9 小时前
【开题答辩全过程】以 高校兼职系统为例,包含答辩的问题和答案
java·spring boot
sin_hielo9 小时前
leetcode 1590
数据结构·算法·leetcode