博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode Ones and Zeroes
阅读量:5152 次
发布时间:2019-06-13

本文共 1890 字,大约阅读时间需要 6 分钟。

原题链接在这里:

题目:

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 only 0s 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 most once.

Note:

  1. The given numbers of 0s and 1s will both not exceed 100
  2. 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".

题解:

DP问题. 

求m个0和n个1最多能包含几个给出的string. 保存历史信息dp[i][j] 是i个0和j个1最多能包含几个string.

递推时, 若包含当前String s, s中有x个0和y个1. 那么dp[i][j] = 1 + dp[i-x][j-y]. 若不包含s, dp[i][j] = dp[i][j]. 两者取较大值.

初始化都是0.

答案dp[m][n].

Time Complexity: O(strs.length*m*n).

Space: O(1).

AC Java:

1 class Solution { 2     public int findMaxForm(String[] strs, int m, int n) { 3         if(strs == null || strs.length == 0 || m < 0 || n < 0){ 4             return 0; 5         } 6          7         int [][] dp = new int[m+1][n+1]; 8         for(String s : strs){ 9             int [] count = countZerosOnes(s); 10             for(int i = m; i>=count[0]; i--){11                 for(int j = n; j>=count[1]; j--){12                     dp[i][j] = Math.max(dp[i][j], 1+dp[i-count[0]][j-count[1]]);13                 }14             }15         }16         return dp[m][n];17     }18     19     private int [] countZerosOnes(String s){20         int [] res = new int[2];21         for(int i = 0; i

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/7616775.html

你可能感兴趣的文章
深浅拷贝(十四)
查看>>
HDU 6370(并查集)
查看>>
BZOJ 1207(dp)
查看>>
HDU 2076 夹角有多大(题目已修改,注意读题)
查看>>
洛谷P3676 小清新数据结构题(动态点分治)
查看>>
Attributes.Add用途与用法
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
javascript 无限分类
查看>>
spring IOC装配Bean(注解方式)
查看>>
[面试算法题]有序列表删除节点-leetcode学习之旅(4)
查看>>
SpringBoot系列五:SpringBoot错误处理(数据验证、处理错误页、全局异常)
查看>>
kubernetes_book
查看>>
侧边栏广告和回到顶部
查看>>
https://blog.csdn.net/u012106306/article/details/80760744
查看>>
海上孤独的帆
查看>>
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Manag
查看>>
01: socket模块
查看>>
mysql触发器
查看>>
淌淌淌
查看>>
win10每次开机都显示“你的硬件设置已更改,请重启电脑……”的解决办法
查看>>