474. Ones and Zeroes

2024-02-02 07:32
文章标签 474 zeroes ones

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

在计算机界中,我们总是追求用有限的资源获取最大的收益。

现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。

你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次

注意:

  1. 给定 0 和 1 的数量都不会超过 100
  2. 给定字符串数组的长度不会超过 600

示例 1:

输入: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3
输出: 4解释: 总共 4 个字符串可以通过 5 个 0 和 3 个 1 拼出,即 "10","0001","1","0" 。

示例 2:

输入: Array = {"10", "0", "1"}, m = 1, n = 1
输出: 2解释: 你可以拼出 "10",但之后就没有剩余数字了。更好的选择是拼出 "0" 和 "1" 。

Review:

类似于01背包问题,使用dp算法


Code:

class Solution {public int findMaxForm(String[] strs, int m, int n) {int[][] dp = new int[m + 1][n + 1];for (String str : strs) {int zero = 0, one = 0;for (int i = 0; i < str.length(); i++)if (str.charAt(i) == '0') zero++;else one++;for (int i = m; i >= zero; i--)for (int j = n; j >= one; j--)dp[i][j] = Math.max(dp[i - zero][j - one] + 1, dp[i][j]);}return dp[m][n];}
}

 短就完事了

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



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

相关文章

Leetcode 3195. Find the Minimum Area to Cover All Ones I

Leetcode 3195. Find the Minimum Area to Cover All Ones I 1. 解题思路2. 代码实现 题目链接:3195. Find the Minimum Area to Cover All Ones I 1. 解题思路 这一题还是挺简单的,只要找到所有1所在的元素的上下左右4个边界,作为目标矩形的四个边即可。 2. 代码实现 给出python

485. Max Consecutive Ones 最大连续1的个数

https://leetcode-cn.com/problems/max-consecutive-ones/description/ 思路:用一个累加器count对所有元素求和,一旦遇到0就清零.用res记录下count的最大值,即可知道序列中最长的连续1有多少. int findMaxConsecutiveOnes(vector<int>& nums) {int count = 0;int

MLX5_SET_TO_ONES宏解析

看代码时,遇到一个非常复杂的宏MLX5_SET_TO_ONES,这个宏的主要作用是对特定的数据结构置位,宏的上下文如下: #define __mlx5_nullp(typ) ((struct mlx5_ifc_##typ##_bits *)0)#define __mlx5_bit_off(typ, fld) (offsetof(struct mlx5_ifc_##typ##_bits, fld

代码随想录算法训练营第四十二天 | 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

Light OJ 1028 Trailing Zeroes (I) 求n因子数

题目来源:Light OJ 1028 题意:求一个数转化成任意进制后末尾有0的种数 就是一个数因子的个数 思路:一个数可以被分解成若干素数相乘 p1^x1*p2^x2*...*pn^xn 根据乘法原理 因子数为 (x1+1)*(x2+1)*...*(xn+1) 注意剪枝 #include <cstdio>#include <cstring>#include <cmath>#inc

*lightoj 1138 Trailing Zeroes (III) | 二分+数学

这题问了杰神才知道怎么做。 题意: 给你Q,表示N!的结果后面有Q个零,让你求出最小的N为多少。若无法找到则输出impossible 思路: 根据唯一分解定理,一个自然数可以写成质数的幂次方的乘积。例如10 = 2^1 * 5^1 因为是尾部有Q个零,所以N!的结果中5的幂必须等于Q(此时,2的幂肯定比Q大)。 那么我们如果要求一个数的阶乘的结果5的幂次方是多少。 譬如30!的结果中

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

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

leetcode No283. Move Zeroes

Question 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. Example: Input: [0,1,0,3,12]Output: [1,3,12,0,0] Al

leetcode Move Zeroes

移动零 leetcode 题目:https://leetcode.com/problems/move-zeroes/ 解题思路:把非零元素向前挤压,剩下的元素复制为0 public static void main(String[] args) {int[] arr={0,1,0,3,12};moveZeroes(arr);System.out.println(Arrays.toString(