2.05 算法练习

1. 爬楼梯(进阶版)

算法思路

1. 1阶,2阶,.... m阶就是物品,有 j 阶台阶的楼顶就是背包;
2. 采用完全背包问题解决。

注意点

1. dp[0]要初始化为1,因为既然递归公式是 dp[i] += dp[i - j],那么dp[0] 一定为1,dp[0]是递归中一切数值的基础所在,如果dp[0]是0的话,其他数值都是0了;
2. 爬楼梯求最多方法问题也是一个排列问题,要先遍历背包。

代码

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        // 数爬到有j个台阶的楼顶,有dp[j]种方法
        int[] dp = new int[n+1];
        dp[0] = 1;
        
        for(int j = 1; j<=n; j++){
            for(int i = 1; i<= m; i++){
                if(j>=i) dp[j] += dp[j-i];
            }
        }
        
        System.out.println(dp[n]);
    }
}

2. 零钱兑换

算法思路

1. 本题求的是凑成目标金额的所需的最少硬币数目,而不是方法个数,所以不涉及顺序问题;
2. 采用完全背包的套路来做即可。

注意点

1. 如果 dp[j - coins[i]] 等于 max:这意味着到目前为止,还没有找到任何一种硬币组合能够凑成金额 j - coins[i]。那么即便再加上当前的硬币 coins[i],也无法从一个不可行的状态得到一个可行的凑成金额 j 的方案。所以只有在dp[j - coins[i]] 不等于 max,选择 i 才有意义;
2. 如果dp[amount]最后等于max, 则说明凑不出来。

代码

class Solution {
    public int coinChange(int[] coins, int amount) {
        int max = Integer.MAX_VALUE;
        // 凑成金额为j的最少硬币数为dp[j]
        int[] dp = new int[amount+1];
        Arrays.fill(dp, max);
        dp[0] = 0;
        for(int i = 0; i<coins.length; i++){
            for(int j = coins[i]; j<=amount; j++){
                if(dp[j-coins[i]] != max){
                    dp[j] = Math.min(dp[j], dp[j-coins[i]]+1);
                }
                
            }
        }

        return dp[amount] == max? -1 : dp[amount] ;
        
    }
}

3. 完全平方数

算法思路

与零钱兑换非常相似,但是此题没有“凑不成”的情况。

注意点

1. 因为 j 的遍历应该从1开始,所以i可以从 1 开始取;
2. 因为题目里没有提到从0开始取,所以dp[0]初始化为0;
3. 在完全平方数这题中不存在凑不成这种情况。

代码

class Solution {
    public int numSquares(int n) {
        int max = Integer.MAX_VALUE;
        // 和为j的完全平方数的最小数量为dp[j]
        int[] dp = new int[n+1];
        Arrays.fill(dp, max);
        dp[0] = 0;
        for(int i = 1; i*i<=n; i++){
            for(int j = i*i; j<=n; j++){
                if(dp[j-i*i] != max){
                    dp[j] = Math.min(dp[j], dp[j-i*i]+1);
                }
            }
        }

        return dp[n];
        
    }
}

4. 单词拆分

算法思路

1. 确定dp[i] 的状态,并截取字符串中 j-i 的部分。
2. 如果确定dp[i] 是true,且 [i, j] 这个区间的子串出现在字典里,那么dp[j]一定是true。

注意点

判断是否包含函数contains(),字符串截取函数substring()的拼写;

代码

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        Set<String> words = new HashSet<>(wordDict);
        // 长度为j的字符串是否能够被拼接而成
        boolean[] dp = new boolean[s.length()+1];
        dp[0] = true;
        for(int j = 1; j<=s.length(); j++){
            for(int i = 0; i<j; i++){
                if(words.contains(s.substring(i, j)) && dp[i]){
                    dp[j] = true;
                }
            }
        }

        return dp[s.length()];
        
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

redis持久化理论

0 前言 什么是持久化 redis操作都是在内存中&#xff0c;如果出现宕机的话&#xff0c;数据将不复存在&#xff0c;所以持久化是将内存中的数据刷盘到磁盘中&#xff0c;redis可以提供RDB和AOF将数据写入磁盘中。 一 持久化技术 本章节将介绍持久化RDB和AOF两个技术&#xf…

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂&#xff0c;其末端执行器的位置可以表示为&#xff1a; 其中&#xff1a; L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…

鸿蒙UI(ArkUI-方舟UI框架)- 使用文本

返回主章节 → 鸿蒙UI&#xff08;ArkUI-方舟UI框架&#xff09; 文本使用 文本显示 (Text/Span) Text是文本组件&#xff0c;通常用于展示用户视图&#xff0c;如显示文章的文字内容。Span则用于呈现显示行内文本。 创建文本 string字符串 Text("我是一段文本"…

科技赋能数字内容体验的核心技术探索

内容概要 在数字化时代&#xff0c;科技的迅猛发展为我们的生活和工作带来了深刻的变革。数字内容体验已经成为人们获取信息和娱乐的重要途径&#xff0c;而这背后的技术支持则扮演着至关重要的角色。尤其是在人工智能、虚拟现实和区块链等新兴技术的推动下&#xff0c;数字内…

详细教程 | 如何使用DolphinScheduler调度Flink实时任务

Apache DolphinScheduler 非常适用于实时数据处理场景&#xff0c;尤其是与 Apache Flink 的集成。DolphinScheduler 提供了丰富的功能&#xff0c;包括任务依赖管理、动态调度、实时监控和日志管理&#xff0c;能够有效简化 Flink 实时任务的管理和部署。通过 DolphinSchedule…

棋盘(二维差分)

题目&#xff1a; 5396. 棋盘 题目 提交记录 讨论 题解 视频讲解 小蓝拥有 nnnn 大小的棋盘&#xff0c;一开始棋盘上全都是白子。 小蓝进行了 mm 次操作&#xff0c;每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0c;黑色棋子变…

MySQL数据库基础(创建/删除 数据库/表)

一、数据库的操作 1.1 显示当前数据库 语法&#xff1a;show databases&#xff1b; <1>show 是一个关键字&#xff0c;表示要执行的操作类型 <2>databases 是复数&#xff0c;表示显示所有数据库 上面的数据库中&#xff0c;除了java113&#xff0c;其它的数据库…

【WebLogic】Oracle发布WebLogic 14c最新版本-14.1.2.0

根据Oracle官方产品经理的博客&#xff0c;Oracle于2024年12月20日正式对外发布了WebLogic 14c的第二个正式版本&#xff0c;版本号为 14.1.2.0.0 &#xff0c;目前官方已开放客户端下载。该版本除继续支持 Jakarta EE 8 版本外&#xff0c;还增加了对 Java SE 17&#xff08;J…

SQL Server 数据库迁移到 MySQL 的完整指南

文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…

springboot+vue导入ruoyi项目的框架

一、介绍 RuoYi-Vue版本&#xff0c;采用了前后端分离的单体架构设计软件环境&#xff1a;JDK、Mysql、Redis、Maven、Node技术选型: Spring Boot、Spring Security、MyBatis、Jwt、Vue3、Element-Plus官方地址: https://gitee.com/y_project/RuoYi-Vue 官方推荐的版本如下&a…

jvm 篇

字节码的作用 ‌跨平台性‌&#xff1a;字节码是Java实现跨平台特性的关键。Java源代码编译成字节码后&#xff0c;可以在任何安装了Java虚拟机&#xff08;JVM&#xff09;的设备上运行&#xff0c;这使得Java应用程序能够在不同的操作系统和硬件平台上运行而无需重新编译。‌…

【Springboot】Springboot 自定义线程池的参数配置最优是多少

博主介绍&#xff1a;✌全网粉丝22W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

【2】Cisco SD-WAN 组件介绍

1. 概述 Cisco SD-WAN 是一套基于软件定义的广域网(SD-WAN)解决方案,能够提供安全、可扩展且高效的网络连接。它通过集中的控制和智能路径选择,实现跨多个站点的可靠性、可见性和优化。 在 Cisco SD-WAN 体系架构中,主要由四个核心组件构成: vManage(管理平面) vSmart…

测试中的第一性原理:回归本质的质量思维革命

在软件工程领域&#xff0c;测试活动常被惯性思维和经验主义所主导——测试用例库无限膨胀、自动化脚本维护成本居高不下、测试策略与业务目标渐行渐远。要突破这种困境&#xff0c;第一性原理&#xff08;First Principles Thinking&#xff09;提供了独特的解题视角&#xff…

《chatwise:DeepSeek的界面部署》

ChatWise&#xff1a;DeepSeek的界面部署 摘要 本文详细描述了DeepSeek公司针对其核心业务系统进行的界面部署工作。从需求分析到技术实现&#xff0c;再到测试与优化&#xff0c;全面阐述了整个部署过程中的关键步骤和解决方案。通过本文&#xff0c;读者可以深入了解DeepSee…

机器学习在癌症分子亚型分类中的应用

学习笔记&#xff1a;机器学习在癌症分子亚型分类中的应用——Cancer Cell 研究解析 1. 文章基本信息 标题&#xff1a;Classification of non-TCGA cancer samples to TCGA molecular subtypes using machine learning发表期刊&#xff1a;Cancer Cell发表时间&#xff1a;20…

什么是AIOps?

AIOps&#xff08;人工智能运维&#xff0c;Artificial Intelligence for IT Operations&#xff09;是通过使用人工智能&#xff08;AI&#xff09;技术来增强 IT 运维&#xff08;IT Operations&#xff09;的智能化、自动化和效率的概念。它结合了机器学习、数据分析、自动化…

使用deepseek快速创作ppt

目录 1.在DeekSeek生成PPT脚本2.打开Kimi3.最终效果 DeepSeek作为目前最强大模型&#xff0c;其推理能力炸裂&#xff0c;但是DeepSeek官方没有提供生成PPT功能&#xff0c;如果让DeepSeek做PPT呢&#xff1f; 有个途径&#xff1a;在DeepSeek让其深度思考做出PPT脚本&#xf…

DeepSeek 引领的 AI 范式转变与存储架构的演进

近一段时间&#xff0c;生成式 AI 技术经历了飞速的进步&#xff0c;尤其是在强推理模型&#xff08;Reasoning-LLM&#xff09;的推动下&#xff0c;AI 从大模型训练到推理应用的范式发生了剧变。以 DeepSeek 等前沿 AI 模型为例&#xff0c;如今的 AI 技术发展已不局限于依赖…

vscode 设置在编辑器的标签页超出可视范围时自动换行(workbench.editor.wrapTabs)

“workbench.editor.wrapTabs”: true 是 VS Code&#xff08;Visual Studio Code&#xff09; 的一个设置项&#xff0c;它的作用是 在编辑器的标签页超出可视范围时自动换行&#xff0c;而不是显示滚动条。 需要修改settings.json 参考&#xff1a;settings.json 默认值&a…