leetcode50. Pow(x, n),快速幂算法

news2024/11/15 15:40:21

leetcode50. Pow(x, n),快速幂算法

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

示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:
输入:x = 2.10000, n = 3
输出:9.26100

示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25

目录

  • leetcode50. Pow(x, n),快速幂算法
    • 总体思维导图
  • 快速幂算法详解
    • 算法背景
    • 算法原理
    • 算法步骤
    • 算法优势
    • 应用场景
    • 流程图
    • 具体代码
    • 算法分析
    • 相似题目

总体思维导图

在这里插入图片描述

快速幂算法详解

算法背景

快速幂算法是一种高效计算 x n x^n xn 的方法,特别适用于 n n n 非常大的情况。它基于幂的性质和二进制表示。

算法原理

  1. 二进制表示:任何整数 n n n 都可以用二进制表示。例如, 13 13 13 的二进制表示是 1101 1101 1101
  2. 幂的性质 x n x^n xn 可以分解为 x 2 0 × x 2 1 × x 2 2 × … x^{2^0} \times x^{2^1} \times x^{2^2} \times \ldots x20×x21×x22× 的形式。例如, x 13 x^{13} x13 可以分解为 x 1 × x 4 × x 8 x^{1} \times x^{4} \times x^{8} x1×x4×x8
  3. 位操作:通过检查 n n n 的二进制表示中的每一位,我们可以确定是否需要将对应的 x 2 k x^{2^k} x2k 乘入结果中。

算法步骤

  1. 初始化

    • 设置结果 res 为 1。
    • 将指数 n n n 转换为长整型 nn 以避免在负数时的整数溢出。
  2. 特殊情况处理

    • 如果 x = 1 x = 1 x=1,直接返回 x x x
    • 如果 x = − 1 x = -1 x=1,根据 n n n 的奇偶性返回 x x x − x -x x
    • 如果 n < 0 n < 0 n<0,将 n n nn nn 设为正数,并将 x x x 设为其倒数。
  3. 快速幂计算

    • 使用 while 循环,当 n n > 0 nn > 0 nn>0 时执行。
    • 如果 n n nn nn 的当前最低位为 1(nn & 1),则将 r e s res res 乘以 x x x
    • n n nn nn 右移一位(nn >>= 1),即除以 2。
    • x x x 平方(x = x * x)。
  4. 返回结果

    • n n nn nn 变为 0 时,返回 res

算法优势

  • 时间复杂度降低:传统的幂运算需要 O ( n ) O(n) O(n) 的时间复杂度,而快速幂算法只需要 O ( log ⁡ n ) O(\log n) O(logn)
  • 减少乘法操作:通过跳过不必要的乘法,算法减少了计算量。

应用场景

快速幂算法常用于需要高效率幂运算的场合,例如密码学、大数运算等。

这个算法的关键在于利用了二进制的性质和位操作,从而将一个复杂的幂运算问题转化为一系列更简单的乘法和位移操作。

流程图

开始
特殊情况处理
底数x是否为1
返回1
底数x是否为-1
根据n的奇偶性返回结果
指数n是否小于0
取反n, 取倒数x
初始化res=1
循环处理
检查n是否为奇数
res *= x
n >>= 1
x *= x
n是否大于0
返回res
结束

具体代码

class Solution {
public:
    double myPow(double x, int n) {
    double res=1;
    long long nn=(long long)n;
    if(x==1.00000)
    {
        return x;
    }
    if(x==-1.00000)
    {
        if(nn%2==1) return x;
        else return -x;
    }
    if(nn<0) 
    {
        nn=-nn;
        x=1/x;
    }
    while(nn)
    {
        if(nn&1) res*=x;
        nn>>=1;
        x=x*x;
    }
    return res;
    }
};

算法分析

  • 时间复杂度 O ( log ⁡ n ) O(\log n) O(logn),因为每次循环 n n n 都至少减少一半。
  • 空间复杂度 O ( 1 ) O(1) O(1),只使用了常数空间。
  • 易错点:处理负指数和 x = − 1 x = -1 x=1 的情况时容易出错。
  • 注意点:使用 long long 类型处理大指数,防止整数溢出。

相似题目

下面是一些与快速幂算法相关的题目,您可能会感兴趣:

题目链接
Pow(x, n)LeetCode
Super PowLeetCode
Pow(x, n) IILintCode

这些题目都可以使用快速幂算法来解决。

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

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

相关文章

贵阳高新区:加强数字人才培育 引领数字经济未来

在近期举行的贵阳高新区&#xff08;贵州科学城&#xff09;2024年科技创新与成果交流夏季活动中&#xff0c;来自清华大学2022级大数据&#xff08;贵州&#xff09;全日制工程硕士专业的学生们展示了他们在城市公交数据挖掘、通勤线路优化、场景数据的稳定训练以及营运车辆风…

数据分析:多诊断指标ROC分析

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 介绍 pROC::roc函数能够使用一个指标(predictor)去区分两个或多个分组(response),并计算95%置信区间的原理基于以下几个关键点: ROC曲线:ROC曲线是一种图形表示,用于展示分类模型在所有…

【轨物洞见】从电磁感应现象的发现和应用理解科学、技术、工程的关系

电磁感应现象是19世纪以来人类最伟大的发现。有了这个发现&#xff0c;才有后来电和无线电这两大改变人类命运的技术&#xff0c;第二次、第三次工业革命才会发生&#xff0c;人类财富才会猛增、我们的生活才会越来越美好。 让我们来回顾一下电磁感应现象的发现和应用&#xff…

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-05-数据架构规划与设计

文章目录 1 数据库设计与类的设计融合2. 数据库设计与XML设计融合 教材本节实在太敷衍了&#xff0c;没什么有用的内容 1 数据库设计与类的设计融合 不存在唯一正确的数据模型&#xff0c;然而却存在好的数据模型好模型的目标 将工程项目整个生存期内的花费减至最小 而不是单纯…

KL 散度(python+nlp)

python demo KL 散度&#xff08;Kullback-Leibler divergence&#xff09;&#xff0c;也称为相对熵&#xff0c;是衡量两个概率分布之间差异的一种方式。KL 散度是非对称的&#xff0c;也就是说&#xff0c;P 相对于 Q 的 KL 散度通常不等于 Q 相对于 P 的 KL 散度。 一个简…

zabbix7.0TLS-05-快速入门-触发器

文章目录 1 概述2 查看触发器3 添加触发器4 验证触发器5 查看问题6 问题恢复 1 概述 监控项用于收集数据&#xff0c;但是我们并不能时刻观测每个监控项的数据&#xff0c;看看哪个监控项的数据超过了正常可接受的数值或状态&#xff0c;比如 CPU 负载高于 90%、磁盘使用率低于…

不平衡数据:Handling Imbalanced Dataset with SMOTE导致ValueError ⚖️

不平衡数据&#xff1a;Handling Imbalanced Dataset with SMOTE导致ValueError ⚖️&#x1f4c8; 不平衡数据&#xff1a;Handling Imbalanced Dataset with SMOTE导致ValueError ⚖️&#x1f4c8;摘要引言详细介绍什么是不平衡数据集&#xff1f;⚖️SMOTE简介&#x1f4c8…

加密案例分享:电子设备制造行业

企业核心诉求选择 1.某企业规模庞大&#xff0c;分支众多&#xff0c;数据安全管理方面极为复杂&#xff1b; 2.企业结构复杂&#xff0c;包括研发、销售、财务、总部、分部、办事处、销售等单位连结成为一个庞大的企业组织&#xff0c;数据产生、存储、流转、使用、销毁变化…

Selenium + Python 自动化测试08(截图)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上一篇我们讨论了滑块的操作方法&#xff0c;本篇文章我们讲述一下截图的操作方法。希望能够帮到爱学的小伙伴。 在实际的测试项目组中我们经常要截屏保存报错信息&#xff0c…

做个一套C#面试题

1.int long float double 分别是几个字节 左到右范围从小到大&#xff1a;byte->short->int->long->float->double 各自所占字节大小&#xff1a;1字节、2字节、4字节、8字节、4字节、8字节 2.System.Object四个公共方法的申明 namespace System {//// 摘要…

C#如何解决引用类型的“深度”克隆问题

前言 在C#中我们new一个引用类型的对象称为对象1&#xff0c;如果我们再次new一个引用类型的对象称为对象2&#xff0c;如果直接将第一个对象直接赋值给第二个对象&#xff0c;然后如果我们这时候改变对象2的值&#xff0c;你会发现对象1的值也会被更改&#xff0c;这就是引用…

在ubuntu系统上安装nginx以及php的部署

1、安装依赖包 apt-get install gcc apt-get install libpcre3 libpcre3-dev apt-get install zlib1g zlib1g-dev sudo apt-get install openssl sudo apt-get install libssl-dev 2、到nginx官方下载 官方地址&#xff1a;nginx: download 图中下载的nginx1.22版本&#…

Python | Leetcode Python题解之第322题重新安排行程

题目&#xff1a; 题解&#xff1a; class Solution:def findItinerary(self, tickets: List[List[str]]) -> List[str]:def dfs(curr: str):while vec[curr]:tmp heapq.heappop(vec[curr])dfs(tmp)stack.append(curr)vec collections.defaultdict(list)for depart, arri…

element-ui周选择器,如何获取年、周、起止日期?

说明 版本&#xff1a;vue2、element-ui2.15.14 element-ui的日期选择器可以设为周&#xff0c;即typeweek&#xff0c;官方示例如下&#xff1a; 如果你什么都不操作&#xff0c;那么获取的周的值为&#xff1a; value1: Tue Aug 06 2024 00:00:00 GMT0800 (中国标准时间)如…

分布式存储ceph知识点整理

一、Ceph概述 如何选择存储 底层协议兼容性产品要有定位&#xff0c;功能有所取舍针对特定市场的应用存储被市场认可的存储系统 稳定性是第一位的性能第二数据功能要够用 一&#xff09;存储分类 1、本地存储 本地的文件系统&#xff0c;不能在网络上用。 如&#xff1a;ext3、…

WPF学习(11)-ToolTip控件(提示工具)+Popup弹出窗口

ToolTip控件 ToolTip控件继承于ContentControl&#xff0c;它不能有逻辑或视觉父级&#xff0c;意思是说它不能以控件的形式实例化&#xff0c;它必须依附于某个控件。因为它的功能被设计成提示信息&#xff0c;当鼠标移动到某个控件上方时&#xff0c;悬停一会儿&#xff0c;…

【React】实现输入框切换

需求 类似designable-antd平台的这个切换功能&#xff1a; 点击右边按钮&#xff0c;可以切换不同的输入框样式。 实现 维护一个type-component的类型数组遍历数组&#xff0c;找到当前组件类型并渲染当切换输入框样式的时候&#xff0c;获取下一个组件类型并渲染。如果为最…

UE5——如何在UI界面中显示鼠标并可以点击按钮

首先进入UI蓝图的图标界面&#xff0c;在Event Construct节点 后连接一个Set Input Model UI Only去设置用户的输入模式 同时使用Get Player Controller获取玩家控制器并连接到Set Input Model UI Only的Player Controller 连接好后是这个样子。 此时整个UI界面只能获取到鼠标的…

Apple 智能基础语言模型

Introducing Apple’s On-Device and Server Foundation Models technical details June 10, 2024 在2024年的全球开发者大会上&#xff0c;苹果推出了Apple Intelligence&#xff0c;这是一个深度集成到iOS 18、iPadOS 18和macOS Sequoia中的个人智能系统。Apple Intelligen…

【系统响应慢排查所需命令】ps -ef、grep、jstat、pmap 、sort 、head 、jmap 、dump.hprof

列出所有进程&#xff0c;找到需要的进程id【ps -ef】 UID: 进程所属的用户 ID。 PID: 进程 ID。 PPID: 父进程 ID。 C: CPU 使用率。 STIME: 进程启动的时间。 TTY: 与进程关联的终端。 TIME: 进程占用的 CPU 时间。 CMD: 启动进程的命令。 假如是搜索功能缓慢&#x…