当前位置:网站首页>算法---一和零(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
七夕快乐
边栏推荐
- DEJA_VU3D - Cesium功能集 之 056-智图Arcgis地图纠偏
- Android interview question - how to write with his hands a non-blocking thread safe queue ConcurrentLinkedQueue?
- 机器学习概述
- Machine Learning Overview
- mysql数据库表什么字段类型的存储长度最大?
- pyqt5 + socket 实现客户端A经socket服务器中转后主动向客户端B发送文件
- Feature preprocessing
- dedecms dream weaving tag tag does not support capital letters fix
- Analyses the mainstream across technology solutions
- App rapid development and construction experience: the importance of small programs + custom plug-ins
猜你喜欢

Visibility of multi-column attribute column elements: display, visibility, opacity, vertical alignment: vertical-align, z-index The larger it is, the more it will be displayed on the upper layer

工业级远距离无线传输装置的功能有哪些?

iMedicalLIS listener (2)

upload上传图片到腾讯云,如何上传图片

How to solve complex distribution and ledger problems?

从企业的视角来看,数据中台到底意味着什么?

Homework 8.4 Interprocess Communication Pipes and Signals

4T硬盘剩余很多提示“No space left on device“磁盘空间不足

dedecms后台生成提示读取频道信息失败的解决方法
![【 8.4 】 source code - [math] [calendar] [delete library 】 【 is not a simple sequence (Bonus) 】](/img/b5/716627b370e489ccf320a86540f7ba.png)
【 8.4 】 source code - [math] [calendar] [delete library 】 【 is not a simple sequence (Bonus) 】
随机推荐
creo怎么测量点到面的距离
[informix] Resolving startup errors and solutions
bytebuffer 使用demo
【informix】解决启动报错大全,以及解决办法
JeeSite New Report
Talk about 20 common problems in data governance
[SWPU2019]Web1
bytebuffer 内部结构
DEJA_VU3D - Cesium功能集 之 056-智图Arcgis地图纠偏
mutillidae download and installation
how to measure distance from point to face in creo
flink reads mongodb data source
Mysql的undo log详解
bytebuffer put flip compact clear 方法演示
Feature preprocessing
Application status of digital twin technology in power system
【8.3】代码源 - 【喵 ~ 喵 ~ 喵~】【树】【与】
1007 Climb Stairs (贪心 | C思维)
The production method of the powered small sailboat is simple, the production method of the electric small sailboat
How to wrap markdown - md file