玩玩快速冥(LeetCode50题与70题以及联系斐波那契)

news2024/11/19 17:19:27

一.算法快速幂

今天刷到两个题,比较有意思,还是记录一下.
先来讲讲50题.

LeetCode50(Pow(x,n))

实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。

在这里插入图片描述

这道题一看很平常啊,不就一直乘嘛,循环走一次就够了.但是很抱歉,单纯的想法终究迎来了超时.而且还是个中等的题目,意识到没那么简单.我们需要换种思路.

对于2的128次方,如果我们需要一次次循环遍历,得需要128次才能计算得出.
而我们仔细把128拆分可以发现
2 * 2 = 2²
2² * 2² = 2⁴
2⁴ * 2⁴ = 2^8
2^8 * 2^8 = 2^16
2^16 * 2^16 = 2^32
2^32 * 2^32 = 2^64
2^64 * 2^64 = 2^128
我们只需要7次就能得到答案.
那有人就问了,你这是2的次数幂可以这样算而已.那我们对于不是2的整数幂如何处理呢?
例如7的105次方,我们可以将它进行拆分
这样不好看105,我们转化成2进制试试.
0110 1001
即等于 7^64+ 7^32 + 7^8 + 7^1 = 7^105.
在这里插入图片描述
是不是我们每次都能拆分成2的整数幂
对于7*64我们可不可以通过之前的快速幂得到,答案是肯定的,

那我们怎么去判定什么时候需要去进行这个拆分的相乘呢?在上图中我们注意到,我们需要的快速幂的数都是正好二进制置为1的数.我们只需要去进行取余,只要末尾数为1时,此时我们需要将快速幂的结果相乘,其余步骤只做乘数的累加即可.每进行一次将次方数除二.
我们写出伪代码

function quickPow(a,n)
	r = 1
	while n != 0
		if n mod 2 == 1
			r = r * a
		a=a*a
		n = n/2
	return r

即可以通过这张图这样理解
在这里插入图片描述
那我们还可以进一步优化这段代码.取余的运算我们可以对1做&运算.
而对于除以2我们可以右移一位来实现.

而对于这道题,我们还需要注意一点,就是有负数次幂的时候.其实本质上是一样的,因为负数次幂实际上就等于 1 / a^n.所以最终代码为

class Solution {
    public double myPow(double x, long n) {
        return n >= 0? quickPow(x,n): 1 / quickPow(x,-n);
    }
    public double quickPow(double x,long n){
        double r = 1.0;
        while(n != 0){
            if((n % 2) == 1){
                r = r * x; 
            }
            x = x * x;
            n = n >> 1;
        }
        return r;
    }
}

LeetCode70(爬楼梯)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

在这里插入图片描述
这道题其实我们有几种解法,我介绍两种解法.
第一种,来复习一下动态规划.根据题目我们可以列式子
F(n) = F(n-1) + F(n-2);

即对于任意一个台阶都等于前一个台阶的次数加上前两个台阶的次数.
对于0阶台阶,我们只有一种方法到达,而对于1阶台阶我们也是只有一种方法到达.对于F(2),即2阶台阶,我们有两种方式到达,走两步或者一次性走两步.根据公式也能推导F(2) = F(1) + F(0).依次类推F(3) = F(2) + F(1) = 3次
F(4) = F(3) + F(2) = 5次…

所以每一阶都是前两阶之和.代码为

class Solution {
    public int climbStairs(int n) {
        int f1 = 0,f2 = 0,step = 1;
        for(int i = 0;i < n;i++){
            f1 = f2;
            f2 = step;
            step = f1 + f2;
        }
        return step;
    }
}

那我们如何利用之前提到过的快速幂解决这个问题呢.我们可以利用矩阵.

我们仔细来看看这个表达式
在这里插入图片描述
而对于[{f(n),f(n-1)}]的矩阵我们依旧可以像这样展开,所以最终能得到
在这里插入图片描述
这不就是个幂等式吗,所以依照之前的模板.代码为

public class Solution {
    public int climbStairs(int n) {
        int[][] q = {{1, 1}, {1, 0}}; //定义之前分析到的结果的矩阵
        int[][] res = pow(q, n);
        return res[0][0];
    }

    public int[][] quickPow(int[][] q, int n) {
        int[][] result = {{1, 0}, {0, 1}}; //单元矩阵
        while (n > 0) {
            if ((n & 1) == 1) {
                result = mul(result , q);
            }
            q = mul(q, q);
            n >>= 1;
        }
        return result ;
    }

    public int[][] mul(int[][] x, int[][] y) {
        int[][] res = new int[2][2];
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                res [i][j] = x[i][0] * y[0][j] + x[i][1] * y[1][j];
            }
        }
        return res ;
    }
}

注意: 大家有没有发现一个点啊,这玩意的公式有点像那个.斐波那契是叭.
都是F(n) = F(n-1) + F(n-2)
那对于求斐波那契的多少项我们是不是同样能够这样处理.所以我们求斐波那契的代码和这个是一致的.

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

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

相关文章

计算机网络知识普及之四元组

在涉及到TCP/UDP等IP类通信协议时&#xff0c;存在四元组概念 这里只是普及使用 先来一些前置知识&#xff0c;什么是IP协议&#xff1f; IP协议全称为互联网协议&#xff0c;处于网络层中&#xff0c;主要作用是标识网络中的设备&#xff0c;每个设备的IP地址是唯一的。 在网…

ASO优化:如何提高应用的可见性

在竞争激烈的应用市场中ASO优化成为了提高应用可见性的重要手段。以下是一些提高应用可见性的方法&#xff1a; 1. 选择合适的关键词 找出和您应用高度相关并且具有一定搜索量的关键词&#xff0c;确保关键词与应用的核心功能和用户搜索意图匹配。比如&#xff1a;当您的应用是…

【Rust入门】生成随机数

文章目录 前言随机数库rand添加rand库到我们的工程生成一个随机数示例代码 总结 前言 在编程中&#xff0c;生成随机数是一种常见的需求&#xff0c;无论是用于数据分析、游戏开发还是模拟实验。Rust提供了强大的库来帮助我们生成随机数。在这篇文章中&#xff0c;我们将通过一…

1.4 ROS2集成开发环境搭建

1.4.1 安装VSCode VSCode全称Visual Studio Code&#xff0c;是微软推出的一款轻量级代码编辑器&#xff0c;免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、GIT 等特性&#xff0c;支持插件…

谈谈浏览器的事件机制:捕获、冒泡

浏览器事件的传播有三个阶段&#xff1a;捕获阶段&#xff0c;目标阶段&#xff0c;冒泡阶段 第一部分称为捕获阶段&#xff0c;该阶段包括从舞台到目标节点的父节点范围内的所有节点。第二部分称为目标阶段&#xff0c;该阶段仅包括目标节点。第三部分称为冒泡阶段。冒泡阶段包…

安装Gitlab+Jenkins

GItlab概述 GitLab概述&#xff1a; 是一个利用 Ruby on Rails 开发的开源应用程序&#xff0c;实现一个自托管的Git项目仓库&#xff0c;可通过Web界面进行访问公开的或者私人项目。 Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。 GitLab拥有与…

工业一体机根据软件应用需求灵活选配

在当今工业领域&#xff0c;数字化、智能化的发展趋势愈发明显&#xff0c;工业一体机作为关键的设备&#xff0c;其重要性日益凸显。而能够根据软件应用需求进行灵活选配的工业一体机&#xff0c;更是为企业提供了高效、定制化的解决方案。 一、工业一体机的全封闭无风扇散热功…

【软件测试】性能测试 | 概念 | 常见术语 | 性能指标 | 分类 | 流程

性能测试 文章目录 性能测试一、什么是性能测试1.生活中遇到的软件的性能问题2.性能测试定义3.性能测试和功能测试有什么区别4.什么样的表现属于软件性能好、什么样的表现不好5.影响一个软件性能因素有哪些 二、为什么进行性能测试三、性能测试的常见术语以及性能测试的衡量指标…

深入了解自动化:聊聊什么项目适合做自动化测试?

自动化测试 什么是自动化测 什么是自动化测试&#xff1f; 随着软件产业的不断发展&#xff0c;市场对软件周期的要求越来越高&#xff0c;于是催生了各种开发模式&#xff0c;如大家熟知的敏捷开发&#xff0c;从而对测试提出了更高的要求。此时&#xff0c;产生了自动化测试…

双指针系列第 8 篇:盛水最多的容器。几句话讲明白!

Leetcode 题目链接 思路 取首尾双指针和水量如下所示&#xff0c;设高度函数为 h ( i ) h(i) h(i)&#xff0c;在下图中 h ( l ) < h ( r ) h(l) < h(r) h(l)<h(r)。 观察以 l l l 为左边界所能构成的其他水量&#xff0c;与矮的右边界搭配结果如下。 与高的…

LLM大模型中LoRA是什么?面试经验回答汇总(2024.7月最新)

目录 1 什么是 LoRA&#xff1f; 2 LoRA 的思路是什么&#xff1f; 3 LoRA 的特点是什么&#xff1f; 4 简单描述一下 LoRA? 5 QLoRA 的思路是怎么样的&#xff1f; 6 QLoRA 的特点是什么&#xff1f; 7 AdaLoRA 的思路是怎么样的&#xff1f; 8 LoRA权重是否可以合入…

乘用车副水箱浮球式液位计传感器

浮球式液位计概述 浮球式液位计是一种利用浮球在液体中浮动的原理来测量液位的设备&#xff0c;广泛应用于各种工业自动化控制系统中&#xff0c;如石油化工、水处理、食品饮料等行业。它通过浮球的上下运动来测量液位的高低&#xff0c;具有结构简单、安装方便、测量范围广、…

02:vim的使用和权限管控

vim的使用 1、vim基础使用1.1、vim pathname 2、vim高级用法2.1、查找2.2、设置显示行号2.3、快速切换行2.4、 行删除2.5、行复制粘贴 3、权限管理3.1、普通用户和特权用户3.2、文件权限表示 vim是Linux中的一种编辑器&#xff0c;类似于window中的记事本&#xff0c;可以对创建…

[工业网络] 模型建立

普渡大学ICS参考模型 普渡企业参考架构&#xff08;PERA&#xff09;是由西奥多J威廉姆斯&#xff08;Theodore J. Williams&#xff09;和普渡大学计算机集成制造工业大学联盟的成员在1990年代开发的企业架构参考模型。该模型被ISA-99&#xff08;现为ISA/IEC 62443&#xff…

开发者聊科学作息时间表

非常有幸对科学作息时间表app的开发者做一次采访。 问&#xff1a;你对科学作息时间表app满意么&#xff1f; 答&#xff1a;非常不满意&#xff0c;我们的设想是让他更智能&#xff0c;更多的提醒方式&#xff0c;更好的交互体验。如果作为一个闹钟他是非常不合格的&#xff0…

自然语言处理学习(2)基本知识 文本预处理+文本数据分析+文本增强

conda activate DL conda deactivate课程链接 一 一些包的安装 1 stanfordcorenlp 在anoconda prompt 里面&#xff1a;进入自己的conda环境&#xff0c;pip install stanfordcorenlp 进入方式 相关包下载&#xff0c;Jar包我没有下载下来&#xff0c;太慢了&#xff0c;这个…

昇思25天学习打卡营第6天|数据变换 Transforms

学习目标&#xff1a;熟练掌握数据变换操作 熟悉mindspore.dataset.transforms接口 实践掌握常用变换 昇思大模型平台学习心得记录&#xff1a; 一、关于mindspore.dataset.transforms 1.1 变换 mindspore.dataset.transforms.Compose将多个数据增强操作组合使用。 mindspo…

AIGC之后,AI Agent又要颠覆设计?

随着AIGC&#xff08;AI Generated Content&#xff09;技术的兴起&#xff0c;我们已经见证了内容创作领域的巨大变革。AI能够高效地生成文字、图像、视频等多种形式的内容&#xff0c;极大地提高了内容生产的效率和多样性。然而&#xff0c;当我们认为这已经足够令人惊叹时&a…

01 数据采集层 流量分发第一步规范采集海量数据

《易经》&#xff1a;“初九&#xff1a;潜龙勿用”。潜龙的意思是隐藏&#xff0c;阳气潜藏&#xff0c;阳爻位于最下方称为“初九”&#xff0c;龙潜于渊&#xff0c;是学而未成的阶段&#xff0c;此时需要打好基础。 而模块一我们就是讲解推荐系统有关的概念、基础数据体系…

论文学习_UVSCAN: Detecting Third-Party Component Usage Violations in IoT Firmware

论文名称发表时间发表期刊期刊等级研究单位 Understanding the Security Risks Introduced by Third-Party Components in IoT Firmware 2024年IEEE TDSCCCF A佐治亚理工学院 1. 引言 研究背景&#xff1a;物联网&#xff08;IoT&#xff09;已经无处不在&#xff0c;为我们…