动态规划【Day01】| 669 · 换硬币、114 · 不同的路径、116 · 跳跃游戏

news2024/10/1 19:28:43

秘诀:确定状态+转移方程+初始条件和边界情况+计算顺序

669 · 换硬币

669 · 换硬币
题目描述:
给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1。

样例1
输入:
[1, 2, 5]
11
输出: 3
解释: 11 = 5 + 5 + 1

样例2
输入:
[2]
3
输出: -1

样例3
输入:
[1, 9]
0
输出: 0

举例:有面值为2,5,7三种硬币,找出能够使用最少硬币组合成总额为27的方案?

首先来看看使用递归的问题——做了很多重复计算,效率低下
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

public class Solution {
    /**
     * @param coins: a list of integer
     * @param amount: a total amount of money amount
     * @return: the fewest number of coins that you need to make up
     */
    public int coinChange(int[] coins, int amount) {
        int num = coins.length; //the num of given coins
        int[] f = new int[amount+1]; //0...amount
        f[0] = 0; //init
        for (int remainValue = 1; remainValue <= amount; remainValue++) {
            f[remainValue] = Integer.MAX_VALUE;
            //select last coin(each choice will consider n coins)
            for (int i = 0; i < num; i++) {
                if (remainValue >= coins[i] && f[remainValue-coins[i]] != Integer.MAX_VALUE && f[remainValue-coins[i]]+1<f[remainValue]) {
                    f[remainValue] = f[remainValue-coins[i]]+1;
                }
            }
        }
        if (f[amount] == Integer.MAX_VALUE) {
            return -1;
        }
        return f[amount];
    }
}

感觉数组下标还是用i,j比较直观,具体含义心中有数即可。


114 · 不同的路径

114 · 不同的路径
题目描述:
有一个机器人位于一个 m×n 网格的左上角。

机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。

问有多少条不同的路径?

样例 1:
输入:
n = 1
m = 3
输出:
1
解释:
只有一条通往目标位置的路径。

样例 2:
输入:
n = 3
m = 3
输出:
6
解释:
D : Down
R : Right
DDRR
DRDR
DRRD
RRDD
RDRD
RDDR
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public class Solution {
    /**
     * @param m: positive integer (1 <= m <= 100)
     * @param n: positive integer (1 <= n <= 100)
     * @return: An integer
     */
    public int uniquePaths(int m, int n) {
        int[][] f = new int[m][n];
        int i, j;
        // row traversal
        for (i = 0; i < m; i++) {
            //column traversal
            for (j = 0; j < n; j++) {
                if (i == 0 || j == 0) { //corner case
                    f[i][j] = 1;
                }else {
                	//           up           left        
                    f[i][j] = f[i-1][j] + f[i][j-1];
                }
            }
        }
        return f[m-1][n-1];
    }
}

116 · 跳跃游戏

116 · 跳跃游戏
题目描述:
给出一个非负整数数组,你最初定位在数组的第一个位置。

数组中的每个元素代表你在那个位置可以跳跃的最大长度。

判断你是否能到达数组的最后一个位置。

注:数组中的元素代表着青蛙在当前石头能跳的最大距离,而不是说一定要跳这么多。

样例 1:
输入:
A = [2,3,1,1,4]
输出:
true
解释:
0 -> 1 -> 4(这里的数字为下标)是一种合理的方案。

样例 2:
输入:
A = [3,2,1,0,4]
输出:
false
解释:
不存在任何方案能够到达终点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public class Solution {
    /**
     * @param a: A list of integers
     * @return: A boolean
     */
    public boolean canJump(int[] a) {
        if (a == null || a.length == 0) {
            return false;
        }

        int n = a.length;
        boolean[] f = new boolean[n];
        //init
        f[0] = true;

        for (int j = 1; j < n; j++) {
            //previous stone(last step)
            f[j] = false;
            for (int i = 0; i < j; i++) {
                if (f[j] && i+a[i] >= j) {
                    f[j] = true;
                    break;
                }
            }
        }
        return f[n-1];
    }
}

注:一个细节需要注意一下,数组可以为空,也可以长度为0

今日小结

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

元宇宙将如何彻底改变 K-12 和高等教育

欢迎来到Hubbleverse &#x1f30d; 关注我们 关注宇宙新鲜事 &#x1f4cc; 预计阅读时长&#xff1a;9分钟 本文仅代表作者个人观点&#xff0c;不代表平台意见&#xff0c;不构成投资建议。 想象一下&#xff0c;你将作为一个微小的细胞去参观人类的循环系统。这只是元宇…

基于django搭建简单的个人博客

文章目录第一步、在Ubuntu中安装虚拟环境并进入第二步、安装blog所需要的包&#xff0c;在requirements.txt中安装mysqlclient可能会报错&#xff0c;输入下列命令后在安装即可成功第三步、创建好数据库&#xff0c;把测试数据导入第四步、修改DjangoBlog包中 settings中数据库…

企业如何做好EHS环境健康安全管理?

目前随着传统制造业企业安全管理制度的落实&#xff0c;工人的安全意识得到很大的提升&#xff0c;但企业内部的安全管理制度并不能完全避免意外发生。如受限空间人员闯入、特种设备伤人、人员作业不规范、危化品泄露、仓储车间发生火情、有毒有害气体超标等一系列安全隐患。对…

leaflet 修改popup的样式,个性化弹窗(069)

第069个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中修改popup组件的样式,个性化弹窗。主要方法是更改css, 中增加custom-popup类名,style的样式要做穿透处理 >>>.具体方法请参考源代码。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实…

使用Python绘制股票CCI指标曲线

本文使用Python语言绘制一只股票的CCI&#xff08;Commodity channel index&#xff09;曲线&#xff0c;论文参考《Commodity channel index: Tool for trading cyclic trends》&#xff0c;该指标可以用来测量股价、外汇或者贵金属交易是否已超出常态分布范围&#xff0c;​ …

MYSQL数据库-主从复制(原理及搭建)

文章目录1 概述2 原理3 搭建3.1 主库配置3.2 从库配置1 概述 主从复制是指将主数据库的DDL和 DML操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行(也叫重做)&#xff0c;从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进…

周立功ZCANPRO基础使用教程

软件及驱动安装 1.安装ZCANPRO软件 ZCANPRO软件官网:USB接口CAN卡-广州致远电子股份有限公司 点击资料下载: 2.安装驱动 本人使用的USBCANFD-200U设备,大家可根据自己的设备下载对应的驱动。 设备驱动官网链接:https://manual.zlg.cn/web/#/42/2462 软件使用教程 1.选择…

嵌入式开发:你需要知道的5种简单

传达嵌入式软件体系结构设计意图通常伴随着基于嵌入式开发人员经验的假设。你可以从资源受限的基于微控制器的系统的角度来看架构设计。如何设计架构将取决于系统的嵌入式软件分类。有许多不同的方法可以对嵌入式软件进行分类。我发现有五种简单的嵌入式软件分类可以帮助我调整…

字符串内存分配

涉及三块区域&#xff1a;栈&#xff0c;堆&#xff0c;字符串常量池&#xff08;jdk1.7之前在方法区&#xff0c;jdk1.7之后在堆中&#xff09; 关于字符串常量池到底在不在堆中&#xff1a; jdk1.6及以前&#xff0c;方法区独立存在&#xff08;不在堆里面&#xff09;&…

达梦数据库监控指标

一、达梦数据库监控指标 数据库常见性能指标主要有:当前登录数、非阻塞锁数、当前死锁数、阻塞锁数、当前锁数、会话数等内容,如下图所示。 注意:以下是 达梦数据库监控所需要的指标,具体根据需要监控哪些、超阈值而定。 1.1 新建主机群组 1.2 新建模板 1.3 创建主机 1.…

【Airplay_BCT】Bonjour API架构

Bonjour API 架构 OS X 和 iOS 为 Bonjour 服务应用程序提供了多层应用程序编程接口 (API)&#xff1a; Foundation 框架中的 NSNetService 和 NSNetServiceBrowser 类&#xff1b; CFNetServices&#xff0c;Core Services 中 CFNetwork 框架的一部分&#xff1b; Java 的 DN…

如何在现实场景中随心放置AR虚拟对象?

随着AR的发展和电子设备的普及&#xff0c;人们在生活中使用AR技术的门槛降低&#xff0c;比如对于不方便测量的物体使用AR测量&#xff0c;方便又准确&#xff1b;遇到陌生的路段使用AR导航&#xff0c;清楚又便捷&#xff1b;网购时拿不准的物品使用AR购物&#xff0c;体验更…

【每天进步一点点】函数表达式和函数声明

函数声明 function 函数名&#xff08;&#xff09;{} 函数声明会被率先读取。 函数声明后不会立即执行&#xff0c;会在我们需要的时候调用到。 由于函数声明不是一个可执行语句&#xff0c;所以不以分号结束。 函数表达式 表达式赋值给了一个变量 const 变量名 functi…

GT-suite v2016解决许可证过期问题(附新版liscense下载地址)

安装GT-suite v2016时遇到了如图报错的问题。当时的报错找不到了&#xff0c;下图是贴吧相同问题的报错图。 为了解决问题&#xff0c;先根据某网友的如下答复操作&#xff1a; 添加环境变量后仍然有相同报错。 看来需要寻找其他方法。 再尝试着卸载GT-suite v2016&#xff0c…

【Python--torch.nn.functional】F.normalize用法 + 代码说明

【Python–torch.nn.functional】F.normalize介绍 代码说明 文章目录【Python--torch.nn.functional】F.normalize介绍 代码说明1. 介绍2. 代码说明2.1 一维Tensor2.2 二维Tensor2.3 三维Tensor3. 总结1. 介绍 import torch.nn.functional as F F.normalize(input: Tensor, …

(考研湖科大教书匠计算机网络)第四章网络层-第五节:静态路由配置及其可能产生的路由环路问题

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;静态路由配置&#xff08;1&#xff09;概述&#xff08;2&#xff09;举例说明A&#xff1a;静态路由配置B&#xff1a;默认路由C&#xff1a;特定…

【Python从入门到进阶】7、运算符

接上篇《6、变量规范及类型转换》 上一篇我们学习了Python变量的命名规范以及类型转换。本篇我们来学习Python的运算符部分&#xff0c;包括算数运算符、赋值运算符、比较运算符、逻辑运算符等。 一、运算符含义 运算符用于执行程序代码运算&#xff0c;会针对一个以上操作数…

网友眼中越老越吃香的行业,果然是风向变了!

越老越吃香的行业&#xff0c;一直都是被热议的话题。对于年轻人来说&#xff0c;找到一个适合自己的并且具有前景的工作&#xff0c;不是一件容易的事情。 最近&#xff0c;看到有人在平台上问相关的问题&#xff0c;本着认真看一看的态度点进去&#xff0c;却差点被热评第一…

MyBatis详解1——相关配置

一、什么是MyBatis 1.定义&#xff1a;是一个优秀的持久层框架&#xff08;ORM框架&#xff09;&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis是一个用来更加简单的操作和读取数据库的工具。 2.支持的操作方式&#xff1a;xml或者注解实现操作&#xff08;xm…

Hadoop集群配置

一、系统文件配置集群部署规划NameNode和SecondaryNameNode不要安装在同一台服务器ResourceManager也很消耗内存&#xff0c;不要和NameNode、SecondaryNameNode放在同一台机器上。这里装了四台机器&#xff0c;ant151,ant152,ant153,ant154。ant151ant152ant153ant154NameNode…