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

(每日一道算法题)实现 pow(x, n) 的快速幂解法

50. Pow(x, n) - 力扣(LeetCode)

问题描述

实现 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

提示:

  • -100.0 < x < 100.0
  • -231 <= n <= 231-1
  • n 是一个整数
  • 要么 x 不为零,要么 n > 0 。
  • -104 <= xn <= 104

关键思路

  1. ​处理负数指数​​:当 n 为负数时,计算结果相当于正数次幂的倒数,即 x^(-n) = 1/(x^n)
  2. ​避免溢出​​:当 n 是 Integer.MIN_VALUE 时,取负数会导致溢出,因此需要转换为更大的数据类型(如 long)。
  3. ​快速幂算法(分治)​​:利用分治思想,将 x^n 分解为更小的子问题,递归计算:
    • 若 n 为偶数,x^n = (x^(n/2))^2
    • 若 n 为奇数,x^n = (x^(n/2))^2 * x

代码实现

class Solution {public double myPow(double x, int n) {long N = n; // 转换为long类型避免溢出return N < 0 ? 1.0 / MyPow(x, -N) : MyPow(x, N);}private double MyPow(double x, long n) {if (n == 0) {return 1.0; // 递归终止条件}double half = MyPow(x, n / 2); // 递归计算子问题return n % 2 == 0 ? half * half : half * half * x; // 合并结果}
}

代码解析

  • ​处理负数指数​​:在主函数中,若 n 为负数,则计算其绝对值的次幂后取倒数。
  • ​避免溢出​​:使用 long 类型存储 n 的绝对值,确保在计算过程中不会溢出。
  • ​快速幂算法​​:递归分解次幂计算,每次将问题规模减半,时间复杂度为 O(log n),空间复杂度为 O(log n)(递归栈)。

复杂度分析

  • ​时间复杂度​​:O(log n),每次递归将指数规模减半。
  • ​空间复杂度​​:O(log n),递归调用栈的深度为 log n。

此方法高效地处理了所有可能的输入情况,包括大数运算和负数指数,确保了正确性和高效性。

http://www.xdnf.cn/news/8839.html

相关文章:

  • 本地处理 + GPU 加速 模糊视频秒变 4K/8K 修复视频老旧素材
  • 前端协同文档实现思路
  • LLaMA-Factory 微调模型与训练数据量对应关系
  • 【每日一题 | 2025年5.19 ~ 5.25】动态规划相关题
  • 篇章一 数据结构——前置知识(一)
  • Java 类加载机制详解
  • 【SCL编程案例】1-16整数的随机排列
  • leetcode hot100刷题日记——第一周没做好的题目总结
  • C#拾遗补漏之 Dictionary 详解
  • 【从0到1搞懂大模型】chatGPT 中的对齐优化(RLHF)讲解与实战(9)
  • uniapp报错mongo_cell_decision_not_found
  • Python年快乐!祝福语大全。
  • 从零开始:Python语言进阶之迭代器
  • JVM——JNI 的运行机制
  • Python模型优化技巧
  • Unity基础学习(九)Resources资源同步与异步加载
  • C++23内存分配新特性:std::allocate_at_least
  • JavaWeb:SpringBoot实现简单用户登录JWT用户鉴权
  • string的使用和模拟实现
  • Redis哨兵模式,CLUSTERDOWN Hash slot not server 解决
  • 大数据模型对陌生场景图像的识别能力研究 —— 以 DEEPSEEK 私有化部署模型为例
  • NestJS——重构日志、数据库、配置
  • CMake从入门到实战:现代C++项目构建指南
  • Linux--vim
  • 超简单Translation翻译模型部署
  • TCP/IP
  • Mac系统-最方便的一键环境部署软件ServBay(支持php,java,python,node,go,mysql等)没有之一,已亲自使用!
  • RocketMQ 5.0 核心概念与架构解析
  • 深入剖析 RocketMQ:消息保障、事务处理与负载均衡策略
  • Lua 脚本在 Redis 中的运用-24 (使用 Lua 脚本实现原子计数器)