[leetcode] 474. Ones and Zeroes
来源:互联网 发布:淘宝如何查历史价格 编辑:程序博客网 时间:2024/06/05 11:18
In the computer world, use restricted resource you have to generate maximum benefit is what we always want to pursue.
For now, suppose you are a dominator of m 0s
and n 1s
respectively. On the other hand, there is an array with strings consisting of only0s
and 1s
.
Now your task is to find the maximum number of strings that you can form with given m 0s
and n 1s
. Each 0
and 1
can be used at mostonce.
Note:
- The given numbers of
0s
and1s
will both not exceed100
- The size of given string array won't exceed
600
.
Example 1:
Input: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3Output: 4Explanation: This are totally 4 strings can be formed by the using of 5 0s and 3 1s, which are “10,”0001”,”1”,”0”
Example 2:
Input: Array = {"10", "0", "1"}, m = 1, n = 1Output: 2Explanation: You could form "10", but then you'd have nothing left. Better form "0" and "1".
这道题是从字符串集合中尽可能多的选出字符串并保证0和1个数不超过给定值,题目难度为Medium。
题目和0-1背包问题大同小异,区别是这里限制0和1个数,而0-1背包问题限制总重量,算是动态规划的经典题目,不了解0-1背包问题的同学可以问下度娘。
这里用dp[i][j][k]表示前i个字符串在0个数不超过j、1个数不超过k时最多能选取的字符串个数。统计第i个字符串中0和1个数分别为cnt0和cnt1,如果取第i个字符串则dp[i][j][k] = dp[i-1][j-cnt0][k-cnt1] + 1,如果不取第i个字符串则dp[i][j][k] = dp[i-1][j][k],取两者大的作为dp[i][j][k]的值。由于dp[i][j][k]只与dp[i-1][*][*]相关,所以这里可以重复使用m*n个数据将空间复杂度降为O(m*n),只需在遍历时从后向前遍历即可。具体代码:
class Solution {public: int findMaxForm(vector<string>& strs, int m, int n) { vector<vector<int>> dp(m+1, vector<int>(n+1, 0)); int cnt0, cnt1; for(auto str:strs) { cnt0 = 0; cnt1 = 0; for(auto c:str) { if(c == '0') ++cnt0; else ++cnt1; } for(int i=m; i>=cnt0; --i) { for(int j=n; j>=cnt1; --j) { dp[i][j] = max(dp[i][j], dp[i-cnt0][j-cnt1]+1); } } } return dp[m][n]; }};
- LeetCode 474. Ones and Zeroes
- [leetcode] 474. Ones and Zeroes
- LeetCode 474. Ones and Zeroes
- Leetcode-474. Ones and Zeroes
- [LeetCode]474. Ones and Zeroes
- 【LeetCode】 474. Ones and Zeroes
- LeetCode 474. Ones and Zeroes
- [leetcode]474. Ones and Zeroes
- Leetcode 474. Ones and Zeroes
- Leetcode 474. Ones and Zeroes
- leetcode 474. Ones and Zeroes
- [LeetCode] 474. Ones and Zeroes
- LeetCode: Ones and Zeroes
- [LeetCode] Ones and Zeroes
- Leetcode 474. Ones and Zeroes (Medium) (cpp)
- 第十一周:[Leetcode]474. Ones and Zeroes
- [Leetcode] 474. Ones and Zeroes 解题报告
- 474. Ones and Zeroes
- 修复MySQL中损坏的表
- 编译原理中:短语,直接短语,句柄
- 历届试题 兰顿蚂蚁
- zookeeper入门基本介绍
- 10个帮程序员减压放松的网站
- [leetcode] 474. Ones and Zeroes
- simple又naive的数据结构
- Activity的启动模式
- 安卓实现自定义侧滑菜单
- Linux下配置Redis开机自动启动
- 嵌入式基础之中断处理用法
- hadoop学习第十节:HBase介绍、安装与应用案例
- svn up遇到Conflict discovered in ‘*****’问题
- 格式化输入输出