美文网首页
LeetCode 第 474 题:一和零

LeetCode 第 474 题:一和零

作者: 放开那个BUG | 来源:发表于2024-04-28 15:10 被阅读0次

    1、前言

    题目描述

    2、思路

    将问题转换为01背包问题,也就是背包容量为k的时候,放入0不能超过m,放入1不能超过n,所获得的价值最大;
    dp[k][m][n] = max(dp[k - 1][m][n], dp[k - 1][m - cnt[k][0]][n - cnt[k][1]] + 1)

    3、代码

    class Solution {
        public int findMaxForm(String[] strs, int m, int n) {
            int len = strs.length;
            int[][] cnt = new int[len][2];
            for(int i = 0; i < len; i++){
                String str = strs[i];
                int zero = 0, one = 0;
                for (char c : str.toCharArray()) {
                    if(c == '0'){
                        zero++;
                    }else {
                        one++;
                    }
                }
                cnt[i] = new int[]{zero, one};
            }
            int[][][] dp = new int[len + 1][m + 1][n + 1];
            for(int k = 1; k <= len; k++){
                int zero = cnt[k - 1][0], one = cnt[k - 1][1];
                for(int i = 0; i <= m; i++){
                    for(int j = 0; j <= n; j++){
                        int a = dp[k - 1][i][j];
                        int b = (i >= zero && j >= one) ? dp[k - 1][i - zero][j - one] + 1 : 0;
                        dp[k][i][j] = Math.max(a, b);
                    }
                }
            }
    
            return dp[len][m][n];
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 第 474 题:一和零

          本文链接:https://www.haomeiwen.com/subject/ldfmkdtx.html