当前位置: 首页 > news >正文

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

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

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

相关文章:

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

leetcode50. Pow(x, n)&#xff0c;快速幂算法 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a; 输入&#xff…...

Xinstall神器来袭,轻松搞定CPA推广渠道统计!

在数字化营销日益盛行的今天&#xff0c;CPA&#xff08;按行动付费&#xff09;推广已成为众多企业营销的重要手段。然而&#xff0c;随着渠道流量和获客途径的不断变化&#xff0c;CPA推广渠道统计的痛点也日益凸显。别担心&#xff0c;Xinstall来帮你解决问题&#xff01; …...

011 | efinance分析豆一主连期货

👉👉👉 《玩转Python金融量化专栏》👈👈👈 订阅本专栏的可以下载对应的代码和数据集 🚀 上一篇🌟 下一篇⬅️ 010 东方财富帖子标题情绪分析012 akshare分析NYBOT棉花历史数据 ➡️豆一主连期货(通常简称“豆一”)是指中国期货市场上以大豆为标的的期货合约…...

【Python】函数入门(下)

3&#xff09;&#xff09;* ** ​​​​​​注意&#xff1a;也遵循位置传参在前面&#xff0c;按关键字传参在后面。 代码示例&#xff1a; def func(*args,**kwargs):print(args,kwargs) 该函数中的参数会自动根据传参的方式不同&#xff08;即&#xff1a;按位置…...

git的基本概念和使用原理

Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改并协调多个开发人员之间的工作。以下是Git的基本概念和使用原理及方式&#xff1a; 目录 基本概念 使用原理 基本操作示例 基本概念 版本库&#xff08;Repository&#xff09;&#xff1a; 版本库是Git用来保存…...

手写简化版的vue-router

vue-router作为vue全家桶之一的重要插件&#xff0c;有必要去深究一下&#xff0c;今天我们就从0到1手写一个简化版本。 开始之前&#xff0c;我们使用路由插件时是先进行下载路由 npm i vue-router &#xff0c;然后在main.js中使用app.use导入router插件。想要手写vue-rou…...

分享一个基于uni-app的蛋糕商城订购小程序的设计与实现(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…...

Python绘图入门:使用Matplotlib绘制柱状图

Python绘图入门&#xff1a;使用Matplotlib绘制柱状图 柱状图是一种常见的数据可视化方式&#xff0c;能够直观地展示不同类别之间的数据差异。在Python中&#xff0c;Matplotlib是一个非常强大且灵活的绘图库&#xff0c;它不仅能绘制简单的图表&#xff0c;还能创建复杂的多…...

Qt5编译qmqtt库使用MQTT协议连接华为云IOT完成数据上传与交互

一、前言 随着物联网技术的发展,越来越多的设备通过网络互相连接,形成了庞大的智能系统。这些系统能够收集、分析并响应各种数据,从而实现自动化控制和智能化管理。在这个背景下,MQTT 成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程…...

mysql速起架子

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 下载mysql tar xvJf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 解压 mv mysql-8.0.21-linux-glibc2.12-x86_64 mysql-8.0 改名 去到bin目录 cd bin mkdir data gr…...

云动态摘要 2024-08-14

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 注册阿里云免费领云服务器_云服务器ECS_阿里云 阿里云 2024-08-14 云上试用新玩法&#xff0c;个人享300元免费额度&#xff0c;企业享660元免费额度&#xff0c;多种规格随心试 [免费体验…...

Elasticsearch 桶(Bucket)聚合详解及示例

在 Elasticsearch 中&#xff0c;桶&#xff08;Bucket&#xff09;聚合是一种强大的工具&#xff0c;它允许我们对数据进行分组并统计每组的数量。这种聚合类型对于理解数据的分布和进行分组统计非常有用。本文将详细介绍 Elasticsearch 的桶聚合&#xff0c;并提供完整的示例…...

Django基础知识

文章目录 新建Django项目helloworld关联数据库admin 新建Django项目 创建django-admin startproject project_name 运行 python manage.py runserver 创建app: python manage.py startapp app_name 目录&#xff1a; 配置文件 settings.py 路由配置 urls.py 项目管理 manage.p…...

使用 nginx 搭建代理服务器(正向代理 https 网站)指南

简介 正向代理 简介 在企业开发环境中&#xff0c;局域网内的设备通常需要通过正向代理服务器访问互联网。正向代理服务器充当中介&#xff0c;帮助客户端请求外部资源并返回结果。局域网内也就是俗称的内网&#xff0c;局域网外的互联网就是外网&#xff0c;在一些特殊场景内…...

深入解析亚马逊数据采集工具选择:Data API/Scrape API/Pangolin采集器

引言 在当今电商领域&#xff0c;亚马逊已成为全球最大的在线零售平台之一。随着竞争的加剧和市场的多样化&#xff0c;商家和企业不仅需要优秀的产品和服务&#xff0c;还需要通过深入的数据分析来制定更加精准的市场策略。因此&#xff0c;采集亚马逊站点数据已成为企业实现…...

探索Linux多样性:主流发行版及其应用场景

目录 引言 Debian&#xff1a;稳定性的标杆 Ubuntu&#xff1a;易用性的代表 Red Hat Enterprise Linux (RHEL)&#xff1a;企业的首选 Fedora&#xff1a;创新的前沿 CentOS&#xff1a;开源的稳定之选 Arch Linux&#xff1a;高级用户的定制天堂 Gentoo&#xff1a;性…...

CentOS7.6 HAproxy-7层负载均衡集群——实施方案

目录 1、前期环境准备 1.准备4台主机 1. 设置主机名 2. 设置IP地址然后重启网卡 3. 关闭防火墙和selinux 4. 全部的服务器完成时间统一 二、配置haproxy(192.168.200.11)服务器 1. 安装haproxy 2. haproxy 配置中分成五部分内容 3. 配置HAproxy&#xff08;192.168.2…...

升级ubuntu22.10到24.04

将所有kinetic换成noble&#xff0c;noble是24.04源&#xff0c;sed或手动改。 cd /etc/aptgrep -nr kinetic将old-releases.ubuntu.com替换成国内的地址&#xff0c;因为2210国内源没找到&#xff0c;没有了&#xff0c;但是现在更新到24.04&#xff0c;国内是有的。 apt up…...

YOLO好像也没那么难?

“学YOLO的念头是想整个游戏外挂&#xff01;” 目录 基本原理 模型推理 IOU交并比 NMS非极大值抑制 模型训练 损失函数LOSS 代码实现 YOLO学习渠道 基本原理 模型推理 学习一个新的神经网络结构&#xff0c;作者认为整明白输入和输出是怎么回事就OK了&#xff0c;至于…...

html编写贪吃蛇页面小游戏(可以玩)

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>贪吃蛇小游戏</title><style>body {…...

DeOldify开源贡献指南:如何参与项目改进与代码提交

DeOldify开源贡献指南&#xff1a;如何参与项目改进与代码提交 想为DeOldify这个酷炫的图片上色项目添砖加瓦&#xff0c;但又觉得开源贡献这事儿门槛太高&#xff0c;不知道从何下手&#xff1f;别担心&#xff0c;你绝对不是一个人。很多人对开源既向往又畏惧&#xff0c;总…...

终极Markdown转换神器:浏览器中的写作革命指南

终极Markdown转换神器&#xff1a;浏览器中的写作革命指南 【免费下载链接】markdown-here Google Chrome, Firefox, and Thunderbird extension that lets you write email in Markdown and render it before sending. 项目地址: https://gitcode.com/gh_mirrors/ma/markdow…...

力扣原题《长度最小的子数组》,有序版(理想版最大值查找)纯手搓,已验证,方差版(考虑元素离散,大值周围全是小值的情况)在下一篇

理想版&#xff0c;大值周围是大值 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例…...

ESP32嵌入式系统设计与实现指南

1. 项目概述1.1 系统架构本项目基于ESP32主控芯片设计&#xff0c;采用模块化架构实现多功能嵌入式系统。系统包含以下核心模块&#xff1a;主控单元&#xff1a;ESP32-WROOM-32D模组电源管理&#xff1a;TPS63020升降压转换器传感器接口&#xff1a;I2C/SPI多协议兼容设计人机…...

告别重复造轮子,用快马AI一键生成高复用登录组件提升效率

在开发官网登录入口时&#xff0c;我们常常需要重复处理用户认证、表单验证、状态管理等基础逻辑。这些工作虽然不复杂&#xff0c;但每次从零开始确实会消耗不少时间。最近我发现用InsCode(快马)平台可以快速生成高质量的登录组件&#xff0c;大大提升了开发效率。 组件功能设…...

技术萨满祭典:给数据中心献祭机械硬盘

一、仪式的缘起&#xff1a;当测试工程师遇见数据之灵在数字文明的殿堂中&#xff0c;数据中心是承载万物之灵的圣地。而软件测试从业者&#xff0c;正是穿梭于代码与硬件之间的现代萨满。当机械硬盘&#xff08;HDD&#xff09;在SSD洪流中逐渐退居幕后&#xff0c;这场为老旧…...

OpenClaw监控方案:Qwen3.5-4B-Claude模型异常任务预警系统

OpenClaw监控方案&#xff1a;Qwen3.5-4B-Claude模型异常任务预警系统 1. 为什么需要自动化监控方案 去年夏天的一个深夜&#xff0c;我被连续不断的手机震动声惊醒。打开电脑发现某个数据处理脚本已经运行了18小时——它本该在2小时内完成。更糟糕的是&#xff0c;这个错误导…...

Laravel Backup隔离模式详解:多服务器环境下的终极安全备份方案

Laravel Backup隔离模式详解&#xff1a;多服务器环境下的终极安全备份方案 【免费下载链接】laravel-backup A package to backup your Laravel app 项目地址: https://gitcode.com/gh_mirrors/la/laravel-backup Laravel Backup包为Laravel应用提供了强大可靠的备份解…...

图床项目(二) 接口设计

接口设计 1 . muduo 网络模型 该模型相较于普通的reactor模型复杂一点&#xff0c;其中包括mainReactor 和 多个 subReactor &#xff0c;其中每一个 subReactor对应一个线程。 其中 mainReactor 负责处理新连接 &#xff0c; 并将连接均匀分配给 subReactor &#xff0c;后续…...

【adb端口5555】烽火hg680系列安卓9线刷全攻略:告别强制升级与花屏困扰

1. 烽火HG680系列机顶盒的痛点与解决方案 最近在折腾烽火HG680-GY和HG680-GC这两款机顶盒的朋友应该都深有体会&#xff0c;官方系统用着用着就会弹出强制升级提示&#xff0c;有时候还会莫名其妙出现花屏问题。作为一个折腾过不下20台烽火盒子的老玩家&#xff0c;我太理解这种…...