当前位置:网站首页>算法---一和零(Kotlin)
算法---一和零(Kotlin)
2022-08-05 04:38:00 【小米科技Android 研发曹新雨】
题目
给你一个二进制字符串数组 strs 和两个整数 m 和 n 。
请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。
如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。
示例 1:
输入:strs = [“10”, “0001”, “111001”, “1”, “0”], m = 5, n = 3
输出:4
解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4 。
其他满足题意但较小的子集包括 {“0001”,“1”} 和 {“10”,“1”,“0”} 。{“111001”} 不满足题意,因为它含 4 个 1 ,大于 n 的值 3 。
示例 2:
输入:strs = [“10”, “0”, “1”], m = 1, n = 1
输出:2
解释:最大的子集是 {“0”, “1”} ,所以答案是 2 。
提示:
1 <= strs.length <= 600
1 <= strs[i].length <= 100
strs[i] 仅由 ‘0’ 和 ‘1’ 组成
1 <= m, n <= 100
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ones-and-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解决思路

解决方法
fun findMaxForm(strs: Array<String>, m: Int, n: Int): Int {
val size = strs.size
val dp = Array(size + 1) {
Array(m + 1) {
Array(n + 1) {
0 } } }
//统计0 和 1 的个数
val array = Array(size) {
Array(2) {
0 } }
strs.forEachIndexed {
index, s ->
val toCharArray = s.toCharArray()
toCharArray.forEach {
if (it == '0') {
array[index][0]++
} else {
array[index][1]++
}
}
}
//填充dp数组
for (i in 0..size) {
for (j in 0..m) {
for (k in 0..n) {
if (i > 0) {
dp[i][j][k] = dp[i - 1][j][k]
if (j - array[i - 1][0] >= 0 && k - array[i - 1][1] >= 0) {
dp[i][j][k] = dp[i][j][k].coerceAtLeast(dp[i - 1][j - array[i - 1][0]][k - array[i - 1][1]] + 1)
}
}
}
}
}
return dp[size][m][n]
}
总结
1.思路要清晰
我们要把问题分解开来,只思考要不要把当前加到集合里面
要么不加入,那么就等于前一个最大的值,要么加入,则最大值就等前面的a个0,b个1的最大值 + 1
七夕快乐
边栏推荐
- How to solve complex distribution and ledger problems?
- 关于sklearn库的安装
- software management rpm
- upload upload pictures to Tencent cloud, how to upload pictures
- There are several common event handling methods in Swing?How to listen for events?
- JeeSite New Report
- Bosses, I noticed that a mysql CDC connector parameters scan. The incremental. Sna
- 特征预处理
- dedecms dream weaving tag tag does not support capital letters fix
- 1007 Climb Stairs (贪心 | C思维)
猜你喜欢

How to wrap markdown - md file

upload upload pictures to Tencent cloud, how to upload pictures
![[SWPU2019]Web1](/img/06/36e69a2d7d5475a6749a7d81edf50f.png)
[SWPU2019]Web1

Learning and finishing of probability theory 8: Geometric and hypergeometric distributions
虚证、实证如何鉴别?

Ali's local life's single-quarter revenue is 10.6 billion, Da Wenyu's revenue is 7.2 billion, and Cainiao's revenue is 12.1 billion

JeeSite新建报表

小程序_动态设置tabBar主题皮肤

Paparazzi: Surface Editing by way of Multi-View Image Processing

No regrets, the appium automation environment is perfectly built
随机推荐
Why did you start preparing for the soft exam just after the PMP exam?
software management rpm
flink读取mongodb数据源
App快速开发建设心得:小程序+自定义插件的重要性
DEJA_VU3D - Cesium功能集 之 058-高德地图纠偏
工业级远距离无线传输装置的功能有哪些?
Qixi Festival code confession
将故事写成我们
bytebuffer 使用demo
UE4 后期处理体积 (角色受到伤害场景颜色变淡案例)
UE4 第一人称角色模板 添加生命值和调试伤害
The first performance test practice, there are "100 million" a little nervous
虚证、实证如何鉴别?
Machine Learning Overview
七夕节赚徽章拉
mysql数据库表什么字段类型的存储长度最大?
Cron(Crontab)--use/tutorial/example
不看后悔,appium自动化环境完美搭建
35岁的软件测试工程师,月薪不足2W,辞职又怕找不到工作,该何去何从?
Some conventional routines of program development (1)