【算法】day03:动态规划dp

news2024/11/13 9:15:42

努力经营当下,直至未来明朗!

文章目录

  • 1. 青蛙跳台阶
  • 2. 矩形覆盖
  • 3. 二进制中1的个数
  • 4. 链表中倒数第k个结点


普通小孩也要热爱生活!

1. 青蛙跳台阶

跳台阶
1)思路:如果青蛙在第n个台阶上,那么它要么来自n-1阶,要么来自n-2阶。(因为一次跳1 or 2级台阶)
2)动态规划dp问题
① 定义状态; ② 编写状态方程; ③ 设置初始值
3)详细分析:
① f(n): 青蛙跳上第n级台阶的总跳法数 [定义状态]
②青 蛙跳到n级台阶的方法:要么直接从n-1跳,要么从n-2跳;但是n-2跳到n有两种方式:直接跳or从n-1跳,即:n-1到n-2的就被包含在n-1中
③ 所以:f(n) = f(n-1) + f(n-2) [转移方程]
④ f(0)=1; f(1)=1; f(2)=2; [设置初始值]
⑤ 注意:数组长度=目标台阶+1(从0开始的)
4)补充:一般使用动归,必定使用数组(一维or二维)

代码:
① 递归

public class Solution {
    public int jumpFloor(int target) {
        // 使用递归
        // 定义一个数组:数组长度!!
        int[] dp = new int[target+1];
        dp[0] = 1;
        dp[1] = 1;

        // 循环求跳法
        for(int i=2; i<=target; i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }

        return dp[target];
    }
}

② 迭代(fib)

public class Solution {
    public int jumpFloor(int target) {
        // 使用迭代(fib类似)
        int first = 1;
        int second = 1;
        int third = 1;
        
        // 循环求跳数
        while(target >= 2) {
            third = first + second;
            first = second;
            second = third;
            target--;
        }

        return third;
    }
}

2. 矩形覆盖

矩形覆盖
1)思路:
① 覆盖要么是横着覆盖,要么是竖着覆盖。
② n个小矩形覆盖:要么最后一个竖着放(到n-1),要么最后两个横着放(到n-2)。
2)代码

public class Solution {
    public int rectCover(int target) {
        // 类似于fib
        // f(n) = f(n-1) + f(n-2)
        // 一定不要忘记这个,否则运行失败!
        if(target < 2) {
            return target;
        }

        // 注意数组长度!
        int[] dp = new int[target+1];
        // 初始化:
        dp[0] = 0;
        dp[1] = 1;
        dp[2] = 2;
        for(int i=3; i<=target; i++) {
            dp[i] = dp[i-1] + dp[i-2];
        }

        return dp[target];
    }
}


3. 二进制中1的个数

二进制中1的个数
1)二进制表示一定要体现出其数据类型的位数。如int,则二进制就需要32位来表示
2)思路:

① 按位与+左移/右移,但是不太推荐(如果0太多,无效检测就会增加);
② x&(x-1),直到为0,按位与的次数就是所求x中1的个数(推荐使用

3)代码:

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        while(n != 0) {
            n &= (n-1);
            count++;
        }
        return count;
    }
}


4. 链表中倒数第k个结点

链表中倒数第k个结点
1)思路:定义“前后指针”,前指针front先走k步,然后前后指针同时开始走,直到front走完遇到null,此时尾指针rear所在位置就是倒数第k个结点
2)代码:

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        // 首先进行判断
        if(head==null || k<0) {
            return null;
        }

        // 定义前后指针
        ListNode front = head;
        ListNode rear = head;

        // 开始进行走k步
        while(k>0 && front!=null) {
            front = front.next;
            k--;
        }

        // 同时开始走,直到front==null
        while(front != null) {
            front = front.next;
            rear = rear.next;
        }

        // 注意这里结束的判断条件!!
        return (k>0)? null:rear;
    }
}

yy

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

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

相关文章

python命名规范

1.命名有字母、数字和下划线三个组成 2.项目名、包名、模块名、python文件名 都应该用英文开头&#xff0c;不能纯数字&#xff0c;否则无法识别 3.脚本名不能跟系统模块或三方模块重复 4.函数、类、方法、参数名称不能跟系统现有名称重复 5.类名必须以大写字母开头、除了类…

Kafka在windows下下载、启动、测试详细教程

目录 下载地址 启动 启动zookeeper 启动kafka 队列操作 创建消息队列名 删除消息队列名 查看所有的队列 测试 生产测试 消费测试 下载地址 Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/downloadswindows下kafka3.0版本的…

G120系列变频器进行参数备份(上传或下载)的2种基本方法介绍(Startdrive+SD卡)

G120系列变频器进行参数备份(上传或下载)的2种基本方法介绍(Startdrive+SD卡) 1. 通过SINAMICS SD存储卡对G120系列变频器进行参数上传/下载的具体方法 适配范围:CU240B-2(DP)/CU240E-2(DP/PN)/CU250S-2(DP/PN) 可将变频器的参数设置保存至 SINAMICS SD 卡。在进行变频器更…

回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入多输出

回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入多输出 目录回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入多输出预测效果基本介绍程序设计往期精彩参考资料预测效果 基本介绍 MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入多输出&#xff0c;运行…

docker swarm 集群部署和验证

docker swarm可以轻松的部署集群,实现负载均衡,服务器的扩容和扩容的反义词. 首先docker的官方文档非常的不稳定,梯子也不解决问题.还好有替代 docs.docker.com 用不了 https://docs.docker.com.zh.xy2401.com/engine/swarm/swarm-tutorial/ 很好 场景: 三台机器 x.x.x.104 x.…

经典文献阅读之--FAST-LIVO(Fast-LIO系列的激光视觉惯性里程计)

0. 简介 在此之前博主对Fast-LIO2和R3LIVE进行了系统性的学习。最近文章《Fast and Tightly-coupled Sparse-Direct LiDAR-Inertial-Visual Odometry》提出了FAST-LIVO&#xff0c;这是一种快速LiDAR惯性-视觉里程计系统&#xff0c;它建立在两个紧耦合的直接里程计子系统之上…

结构体、枚举、联合(14)

目录 1、结构体 1、结构的声明 2、特殊的声明 2、结构的自引用 3、结构体变量的定义和初始化 4、结构体内存对齐 1、结构体的对齐规则&#xff1a; 2、为什么存在内存对齐? 3、修改默认对齐数 5、结构体传参 2、枚举 1、枚举类型的定义 2、使用 3、优点 3、联合…

MAC(m1)-Vagrant下载安装

Vagrant是一款用来构建虚拟开发环境的工具&#xff0c;它其实算是一个跨平台的虚拟机管理工具。 Vagrant是构建在虚拟化技术之上的虚拟运行环境管理工具。通过使用Vagrant我们可以快速去构建 我们想要的虚拟环境&#xff0c;同样其搭配virtualbox来进行使用&#xff0c;通过构…

重磅来袭!2023年大版本更新,看看有哪些是你期待的功能和优化吧

Hello&#xff01;好久不见&#xff0c;最近两个月我们的攻城狮和产品汪都在潜心的优化产品&#xff0c;我们将于1月5日上线 v10.7.0版本。本次版本迭代&#xff0c;我们更新了上百项体验优化&#xff0c;并将在未来几周发布更多功能和改进。 本次我们对前端底层架构进行优化重…

vue3笔记案例——Teleport使用之模态框

模态框 理想情况下&#xff0c;我们希望触发模态框的按钮和模态框本身是在同一个组件中&#xff0c;因为它们都与组件的开关状态有关。但这意味着该模态框将与按钮一起渲染在应用 DOM 结构里很深的地方。 使用 Teleport 传送组件可以将组件传送至其他层级的DOM结构中 效果图 …

数据流图实例应用

数据流图实例应用 参考链接&#xff1a; https://blog.csdn.net/xiaoxiang2017/article/details/81460397 https://blog.csdn.net/m0_53130858/article/details/127234104 数据流图&#xff1a;简称DFD&#xff0c;它从数据传递和加工角度&#xff0c;以图形方式来表达系统的逻…

Talk预告 | 几何的魅力: 黑盒攻击新策略

本期为TechBeat人工智能社区第468期线上Talk&#xff01; 北京时间1月4日(周三)20:00&#xff0c;清华大学软件工程专业博士——马晨的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “几何的魅力&#xff1a;黑盒攻击新策略”&#xff0c;届时将介…

【论文笔记】 Exploration With Task Information for Meta Reinforcement Learning

文章目录【论文笔记】 Exploration With Task Information for Meta Reinforcement LearningAbstractKeywordsI. INTRODUCTIONII. RELATED WORKA. Meta Reinforcement LearningB. Exploration in Meta-RLC. Mutual InformationIII. PRELIMINARIESA. Meta Reinforcement Learnin…

Shiro历史漏洞复现 - Shiro-721

文章目录漏洞原理影响版本特征判断环境搭建漏洞复现漏洞原理 Shiro rememberMe 反序列化远程代码执行漏洞 由于 Apache Shiro cookie 中通过 AES-128-CBC 模式加密的 rememberMe 字段存 在问题&#xff0c;用户可通过 Padding Oracle 加密生成的攻击代码来构造恶意的 remembe…

111.(leaflet之家)leaflet椭圆采集

听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html> <html>

yolov4/yolov4-tiny保姆级训练教学

目录 一、pytorch环境搭建 1.创建新环境 2.激活环境 3.按照版本下载 二、labelimg的安装 三、数据处理部分 1、rename数据文件 2、数据加强 四、yolov4训练过程 五、租用GPU 一、pytorch环境搭建 在安装anaconda的前提下 在编译器pycharm的终端 1.创建新环境 conda …

15.3 event loop 事件循环

event loop 事件循环 start 最近这段时间一直在研究 javascript 中的事件循环&#xff0c;看了不少相关视频和文章。学习完知识后&#xff0c;虽然对 javascript 的代码执行顺序&#xff0c;能够正确判断。但是当我想将理论知识用自己口头语言表达出来的时候&#xff0c;发现…

函数 ~~~

函数 目录&#xff1a;函数函数概述函数类型函数定于与声明函数参数引用函数可变函数函数可变参数 使用函数默认参数函数返回值函数嵌套调用函数递归内联函数内联函数与普通函数区别函数重载函数概述 C语言中的函数在其他编程语言中也称为过程或子例程。 我们可以创建函数来执…

小游戏引擎选型注意事项

写在前面 前面写了几期有关于小游戏的文章&#xff0c;主要从小游戏开发、小游戏运营、小游戏变现等多个角度进行了较为粗略的介绍&#xff0c;很多同学表示对小游戏引擎部分很感兴趣&#xff0c;希望能够有一些更为深入的分析介绍。今天就对目前主流的小游戏引擎进行探讨。 …

短短一年,市值抹去三分之一 跌落高坛的苹果

美东时间1月3日&#xff08;周二&#xff09;&#xff0c;苹果&#xff08;AAPL&#xff09;收报125&#xff0e;07美元&#xff0c;跌幅3&#xff0e;74&#xff05;&#xff0c;市值降至1.99万亿美元&#xff0c;2万亿美元市值俱乐部中的最后一家就此陨落。此前微软和石油巨头…