474.一和零

2024-09-03 11:52
文章标签 474

本文主要是介绍474.一和零,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

474.一和零

给你一个二进制字符串数组 strs 和两个整数 mn

请你找出并返回 strs 的最大子集的长度,该子集中 最多m0n1

如果 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 。

思路

动态规划的题完全没思路。

题解,将dp设为一个二维数组代表1和0两个容量下最大子串数量。初始化为0.遍历顺序上,顺序遍历子串(物品),逆序遍历背包容量,递推公式就是dp[i][j]=Math.max(dp[i][j],dp[i-zeroNum][j-oneNum]+1);这里类似于01背包问题,若当前子串(物品)的重量超过背包容量,无法进入循环,进入循环后递推公式有两种情况:1.不装当前子串能去最大2.装入当前子串能取最大。

这么理解下来题目还算透彻。

代码

  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 (int i=0;i<str.length();i++){if (str.charAt(i)=='0') oneNum++;else zeroNum++;}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];}

这篇关于474.一和零的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1132901

相关文章

代码随想录Day 36|滑铁卢了,leetcode题目:1049.最后一块石头的重量、494.目标和、474.一和零

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划一、题目题目一:1049.最后一块石头的重量II解题思路: 题目二:494.目标和动态规划 (二维dp数组)#动态规划 (一维dp数组) 题目三: 474.一和零解题思路: 总结 动态规划 有点难了,之前差的有点多,找时间补 一、题目 题目一:1049.最后一块石头的重量II leetcode题目链接

[LeetCode] 474. Ones and Zeroes

题:https://leetcode.com/problems/ones-and-zeroes/description/ 题目 In the computer world, use restricted resource you have to generate maximum benefit is what we always want to pursue. For now, suppos

代码随想录算法训练营第36天|1049. 最后一块石头的重量、494. 目标和、474.一和零

目录 1049. 最后一块石头的重量 II1、题目描述2、思路3、code4、复杂度分析 494. 目标和1、题目描述2、思路3、code4、复杂度分析 474. 一和零1、题目描述2、思路3、code4、复杂度分析 1049. 最后一块石头的重量 II 题目链接:link 1、题目描述 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块

day41| 01背包问题一 01背包问题二(滚动数组篇)416. 分割等和子集 1049.最后一块石头的重量II 494. 目标和 474. 一和零

文章目录 背景介绍01背包问题一思路方法一方法二 01背包问题二(滚动数组篇)思路方法一方法二 416. 分割等和子集思路方法一 1049.最后一块石头的重量II思路方法一 494. 目标和思路方法方法二 回溯法 474. 一和零思路方法 总结 由于笔试的时候会判重,而这里面的代码都是我自己写的,所以以后的博客都要求会员才能看,感谢理解 背景介绍 01背包问题一 01

代码随想录算法训练营第 36 天 |LeetCode1049. 最后一块石头的重量 II LeetCode 494. 目标和 LeetCode 474.一和零

代码随想录算法训练营 Day36 代码随想录算法训练营第 36 天 |LeetCode1049. 最后一块石头的重量 II LeetCode 494. 目标和 LeetCode 474.一和零 目录 代码随想录算法训练营前言LeetCode1049. 最后一块石头的重量 IILeetCode 494. 目标和 LeetCode 474.一和零一、LeetCode1049. 最后一块

代码随想录算法训练营第四十二天 | 1049.最后一块石头的重量II、494.目标和、474.一和零

1049.最后一块石头的重量II 题目链接:https://leetcode.cn/problems/last-stone-weight-ii/ 文档讲解:https://programmercarl.com/1049.%E6%9C%80%E5%90%8E%E4%B8%80%E5%9D%97%E7%9F%B3%E5%A4%B4%E7… 视频讲解:https://www.bilibili.com

代码随想录算法训练营Day42|1049.最后一块石头的重量II、494.目标和、474.一和零

最后一块石头的重量II 1049. 最后一块石头的重量 II - 力扣(LeetCode) 考虑昨天的能否将一个数组分为两个和相等的子集,本题有类似的思路,即将左右分为左右两个和相近的子集,然后返回其差值,这里使用动态规划的话。 DP数组含义,dp[j]表示能够达到的总重量为j的石头的最大重量 背包容量从0到1501(根据题目要求变化) dp[j] = max(dp[j], dp[j-n

训练营第三十一天 | 494.目标和474.一和零动态规划:完全背包理论基础518.零钱兑换II

494.目标和 力扣题目链接(opens new window) 难度:中等 给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例: 输入:nums: [1, 1, 1, 1, 1], S: 3输

代码随想录训练营Day 45|力扣1049. 最后一块石头的重量 II、494. 目标和、474.一和零

1.最后一块石头的重量2 视频讲解:动态规划之背包问题,这个背包最多能装多少?LeetCode:1049.最后一块石头的重量II_哔哩哔哩_bilibili 代码随想录 代码: class Solution {public:int lastStoneWeightII(vector<int>& stones) {int sum = 0;for(int i = 0;i < sto

代码随想录算法训练营第四十三天 动态规划 part05● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 II 题目链接: . - 力扣(LeetCode) 思路:主要是要找到两个近似相等的子集和,去求这两个和的最小值; 之后就是和从子集中找相对应和的思路是一样的了 注意点:1)dp 初始化;初始为 0; 2)j如果>= 当前物品的容量,是可以装进去的 实现代码: var lastStoneWeightII = function (stones) {let su