代码随想录算法训练营之JAVA|第三十九天|474. 一和零

news2024/9/25 23:21:12

今天是第39天刷leetcode,立个flag,打卡60天。

算法挑战链接

474. 一和零https://leetcode.cn/problems/ones-and-zeroes/

第一想法

题目理解:找到符合条件的子集,这又是一个组合的问题。

看到这个题目的时候,我好像看到了三个维度:物品和背包的两个维度。因此陷入了三维的困境中,以我目前的实力,我是没有办法hold住的。因此我放弃去看题解了。

看完代码随想录之后的想法 

依旧是0-1背包问题。看完后的感想是:既然二维的背包问题,可以压缩为一维的,那为啥三维的不能压缩成二维的呢?

动态规划的五部曲走起:

  • 确定dp数组(dp table)以及下标的含义

dp[i][j] 代表的含义是:在0-x字符串任取的情况下,满足 最多有 i个 1 和 J个0 的组合有dp[i][j] 种

  • 确定递推公式

推导这个值有两个来源:当前的字符串是否需要?

当前字符串不需要:dp[i][j] 

当前字符串需要:dp[i-oneNum][j-zoreNum] + 1

因此递推公式是:dp[i][j] = max(dp[i][j], dp[i-oneNum][j-zoreNum] + 1)

  • dp的初始化

二维数组全部初始化为0即可,因为后续都会被覆盖的。

  • 确定遍历顺序

因为是二维的,因此遍历顺序其实都是可以的。

  • 举例推导dp数组

数据就不推导了。

代码如下:

class Solution {
    public int findMaxForm(String[] strs, int m, int n) {
        //m 是0的个数, n是1的个数
        int dp[][] = new int[m+1][n+1];
        for (String str : strs) {
            int zoreNum = 0;
            int oneNum = 0;
            for (char c : str.toCharArray()) {
                if (c == '0') {
                    zoreNum++;
                }else {
                    oneNum++;
                }
                
            }
            for (int i = m; i >= zoreNum; i--) {
                for (int j = n; j >= oneNum; j--) {
                    dp[i][j] = Math.max(dp[i][j], dp[i-zoreNum][j-oneNum] + 1);
                }
            }
        }
        return dp[m][n];
    }
}

今日收获

思变,思变,不变则退

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/934869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试报告包含哪些内容?

软件测试报告一般包含以下内容: 1、引言(目的、背景、缩略语、参考文献) 2、测试概述(测试目的、项目介绍、测试目标) 3、测试资源(测试人员、测试软硬件环境及配置、测试环境的网络拓扑) 4…

【办公类-16-01-02】2023年度上学期“机动班下午代班的排班表——跳过周三、节日和周末”(python 排班表系列)

背景需求: 2023年第一学期(2023年9-2024年1月),我又被安排为“机动班”,根据新学期的校历,手动推算本学期的机动班的带班表 排版原则 1、班级数量:共有6个班级,循环滚动 2、每周次…

集丰照明|这种灯光效果既简约又漂亮适合汽修洗车美容店

明亮的灯光,既能吸引客户上门,营造美观舒适的氛围。洗车美容店灯光方面既要满足基本的照明亮度,也要有图案、形状的美感。 下面是一家汽车服务店面不同区域的灯光效果,仅供想要开洗车店或者准备店面改造升级的朋友做参考。 灯光是…

Linux系统编程之文件编程常用API回顾和文件编程一般步骤

目录 1.打开文件 2.创建文件 3.写入文件 4.读取文件 5.光标定位 6.关闭文件 7.文件编程一般步骤 Linux系统提供了一些常用API如: 打开/创建 open/creat 读写 write /read 光标定位 Iseek 关闭 close 1.打开文件 参数说明 Pathname:要打开的文件名 (含路径&…

Android Xfermode 使用解析

自定义绘制之图片 canvar.drawBitmap() ,BitMapFactory private fun getBitmap(width: Int): Bitmap? {val option BitmapFactory.Options()option.inJustDecodeBounds trueBitmapFactory.decodeResource(resources, R.mipmap.android111,option)option.inJustDecodeBounds…

Python中@property和@setter的用法

一、property 用法:可以使用property装饰器来创建只读属性,property装饰器会将方法转换为相同名称的只读属性,这样可以防止属性被修改。 实例 class DataSet(object):propertydef method_with_property(self): ##含有propertyreturn 15def…

搭建个人博客Linux + WordPress

这篇文章主要介绍如何搭建个人网站,环境是Linux WordPress。 前面我是搞了个个人网站,不过呢,现在访问不了了。域名过期后,我没及时重新买,然后原先的域名,不知道被哪位兄弟给买走了。 分下面这么几步&a…

基于Java+SpringBoot+Vue前后端分离二手车交易系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

LoadRunner操作教程

日升时奋斗,日落时自省 目录 1、Virtual User Generator (VUG) 1.1、WebTours系统 1.1.1、WebTours启动 1.1.2、WebTours配置 1.2、脚本录制 1.3、编译 1.4、脚本运行 1.5、加强脚本 1.5.1、事务插入 1.5.2、插入集合点 1.5.3、参…

Android 11/12 app-lint 系统Update-API时Lint检查问题

有以下两种解决方法 1. 加SupressLint注解 这种方式你可以其他博客也有 但是要每个类和方法都加上SuppressLint 太麻烦了 我才不要这样呢 2. 添加 --api-lint-ignore-prefix 参数直接跳过代码检查 1. 打开 frameworks/base/Android.bp 文件 2. 搜索找到这个字段 metalava…

京东算法分析

# 1.首先charles抓包发现每个请求Url后都接了一个sign的参数且每次都不一样。也没有其他的一些别的特别参数,那么关键问题就是分析sign参数的生成了 # 2.jadx反编译,寻找sign的生成的位置 > 直接搜索sign参数匹配的出来的结果太多了,一时间不好区分哪个是真的。于是使用get…

sql:SQL优化知识点记录(三)

(1)explain之select_type和table介绍 简单的查询类型是:simple 外层 primary,括号里subquery 用到了临时表:derived (2)explain之select_type介绍 trpe反映的结果与我们sql是否优化过&#xff…

家宽用户家庭网的主要质量问题是什么?原因有哪些

1 引言 截至2020年底,我国家庭宽带(以下简称“家宽”)普及率已达到96%。经过一年多的发展,当前,家庭宽带的市场空间已经饱和。运营商在家宽市场的竞争也随之从新增用户数的竞争转移到家宽品质的竞争。 早期运营商的家…

软件测试收费标准

软件测试 软件测试收费主要根据工作量进行评估,主流的评估方式有以下两种 一、按照工作量评估 工作量从以下4个方面体现: 1、功能性 功能点数量正相关,功能复杂程度正相关例如一个算法逻辑相对复杂的功能点对应需要设计的用例会更多。 2、…

【PyQt】下载文件时弹出提示用户选择保存文件位置的对话框

1 需求 在界面软件中,用户点击下载某个文件,此时软件需要提示用户选择保存到电脑的某个位置,然后软件才能将文件保存到用户指定的电脑文件夹中。 2 代码 # 需引入的库 import os import sys from PyQt5.QtWidgets import QFileDialogsrc .…

复数基本概念

复数是为了解决无法对负数开根号的问题,其为实数的延伸: 复数表示为: a b i abi abi 其中 a 、b 为实数,i 为虚数单位,且 i 2 − 1 i^2 -1 i2−1。实数 a 称为虚数的实部,b 称为虚数的虚部&#xff…

【韩顺平 零基础30天学会Java】数组、排序和查找(2days)

数组、排序、查找和多维数组 数组可以存放多个同一类型的数据。数组也是一种数据类 型,是引用数据类型。 定义一个数组 double[] hens {3,5,1,3.4,2,50} 遍历数组得到数组所有元素的和 hens[下标],下标是从0开始编号的。 可以通过数组名.lenght得到数组…

爬取boss直聘简单案例

前提准备 以chrome自动化为例 下载浏览器驱动 最新版本:Chrome for Testing availability (googlechromelabs.github.io) 旧版本:ChromeDriver - WebDriver for Chrome - Downloads (chromium.org) 查看chrome的版本 设置->关于chrome 如图116版本…

React 如何获取上一次 state 的值

React 如何获取上一次 state 的值 一、用 ref 存储上一次的 state 类似 usePrevious function usePrevious(value) {const ref useRef();useEffect(() > {ref.current value;});return ref.current; }二、通过 setState 的入参改为函数获取

Nginx详解 第二部分:Nginx配置文件详解(附详细配置实例)

Part2 一、Nginx配置文件1.1 主配置文件详解1.2 子配置文件 二、全局配置部分2.1 修改启动的工作进程数(worker process) 优化2.2 cpu与worker process绑定(优化三)2.3 PID 路径修改 优化2.4 修改工作进程的优先级 优化2.7 调试工作进程打开的文件的个数…