474. Ones and Zeroes

本周继续练习动态规划的相关题目。

题目:

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 = 3
Output: 4

Explanation: 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 = 1
Output: 2

Explanation: You could form "10", but then you‘d have nothing left. Better form "0" and "1".

题解:  同样地,这道题需要通过动态规划来解决,因为不能贪心地去换尽量短的字符,当两个字符长度相同的时候,用贪心算法无法决定选哪一个。  因此,这道题需要通过动态规划来解决。题目中给定m个0与n个1,dp[m][n]就标记了在当前的字符串序列下,能够用m个0与n个1取得的最多字符串。  显然,dp[0][0] = 0,因为没有0与1可用的时候,必然得不到字符串    dp[m][n] = max{dp[m][n],dp[m-m0][n-n0]+1}  针对每一个字符串,实质上我们都采取两种策略,选这个字符串,还是不选。做决定之前,先统计这个字符串(第i个)有多少个0与1,分别记为m0与n0,如果不选这个字符串,那么dp[m][n]的值不会发生任何改变,但是选了之后,它的值就是用了m-m0个0 与n-n0个1,所得到的最多的字符串,也就是f[m-m0][n-n0]再加上1,有点类似于经典0-1背包问题  代码:
class Solution {
public:
    int findMaxForm(vector<string>& strs, int m, int n) {
        // m个0 n个1
        vector<vector<int> > dp(m+1,vector<int>(n+1,0));
        for (int i = 0 ; i < strs.size();i++)
        {
            string curr = strs[i];
            int num0 = 0,num1 = 0;
            for(int j = 0; j < curr.length();j++)
            {
                if(curr[j] == ‘0‘) num0++;
                if(curr[j] == ‘1‘) num1++;
            }

            for(int j = m; j >=num0; j--)
            {
                for(int i = n;i >= num1 ;i--)
                {
                    dp[j][i] = max(dp[j][i],dp[j-num0][i-num1]+1);
                }
            }

        }

        return dp[m][n];
    }
};
 
时间: 2025-02-01 09:16:44

474. Ones and Zeroes的相关文章

[Algorithm] 474. Ones and Zeroes

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

过中等难度题目.0310

  .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Medium     . 288 Unique Word Abbreviation      15.8% Medium     . 29 Divide Two Integers      16.0% Medium     . 166 Fraction to Recurring Decimal      17.

继续过中等难度.0309

  .   8  String to Integer (atoi)    13.9% Medium   . 151 Reverse Words in a String      15.7% Medium     . 288 Unique Word Abbreviation      15.8% Medium     . 29 Divide Two Integers      16.0% Medium     . 166 Fraction to Recurring Decimal      17.

LeetCode Problems List 题目汇总

No. Title Level Rate 1 Two Sum Medium 17.70% 2 Add Two Numbers Medium 21.10% 3 Longest Substring Without Repeating Characters Medium 20.60% 4 Median of Two Sorted Arrays Hard 17.40% 5 Longest Palindromic Substring Medium 20.70% 6 ZigZag Conversion Ea

Leetcode problems classified by company 题目按公司分类(Last updated: October 2, 2017)

Sorted by frequency of problems that appear in real interviews.Last updated: October 2, 2017Google (214)534 Design TinyURL388 Longest Absolute File Path683 K Empty Slots340 Longest Substring with At Most K Distinct Characters681 Next Closest Time482

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

在计算机界中,我们总是追求用有限的资源获取最大的收益. 现在,假设你分别支配着 m 个 0 和 n 个 1.另外,还有一个仅包含 0 和 1 字符串的数组. 你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量.每个 0 和 1 至多被使用一次. 注意: 给定 0 和 1 的数量都不会超过 100. 给定字符串数组的长度不会超过 600. 示例 1: 输入: Array = {"10", "0001", "11100

172. Factorial Trailing Zeroes

1. 问题描述 Given an integer n, return the number of trailing zeroes in n!.Note: Your solution should be in logarithmic time complexity.Tags: MathSimilar Problems: (H) Number of Digit One 2. 解题思路 分解质因子, 当且仅当 因子中出现 一对 (2,5)时, 最后结果会增加一个 trailing zero.1. 2的

Move Zeroes

package cn.edu.xidian.sselab.array; /** * titile:Move Zeroes * content: * Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements. * For example, given nums = [0, 1, 0, 3, 1

[LeetCode] Factorial Trailing Zeroes 阶乘末尾0

Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in logarithmic time complexity. Credits:Special thanks to @ts for adding this problem and creating all test cases. Hide Tags Math 这题应该是2014年年底修改该过测试样本,之前的通过