problem:

Implement pow(x, n).

Hide Tags

Math Binary Search

题意:求x的n次幂

thinking:

(1)最简单想到的是直观上的数学幂函数求法,測试通过。算法时间复杂度为O(n)

(2)依照标签提示,使用二分搜索法。

pow(x,n) = pow(x,n-n/2)*pow(x,n/2),每次对n的规模缩半,注意对n的奇偶进行讨论,算法时间复杂度为log(n)

(3)除了上述方法,这里还提到了一种十分巧妙而且高速的方法,原文描写叙述例如以下:

Consider the binary representation of n. For example, if it is "10001011", then x^n = x^(1+2+8+128) = x^1 * x^2 * x^8 * x^128. Thus, we don't want to loop n times to calculate x^n. To speed up, we loop through each bit, if the i-th bit is 1, then we add x^(1 << i) to the result. Since (1 << i) is a power of 2, x^(1<<(i+1)) = square(x^(1<<i)). The loop executes for a maximum of log(n) times.

该方法通过扫描n的二进制表示形式里不同位置上的1,来计算x的幂次,最坏为O(n),但平均复杂度非常好

code:

(1)递归法:accepted

class Solution {
public:double pow(double x, int n) {double ret=1.0;if(x==1.0 )return 1.0;if(x==-1.0){if(n%2==0)return 1.0;elsereturn -1.0;}if(n<0)return 1.0/pow(x,-n);while(n){if(ret==0) //防止执行超时return 0;ret*=x;n--;}return ret;}
};

(2)二分法:accepted

class Solution {
public:double pow(double x, int n) {//double ret=1.0;if(x==1.0 )return 1.0;if(x==-1.0){if(n%2==0)return 1.0;elsereturn -1.0;}if(n==0)return 1.0;if(n<0)return 1.0/pow(x,-n);double half=pow(x,n>>1);if(n%2==0)return half*half;  elsereturn x*half*half;}
};

(3)

为了正确计算x的n次幂,还须要考虑到下面一些情况:

1) x取值为0时。0的正数次幂是1,而负数次幂是没有意义的;推断x是否等于0不能直接用“==”。

2) 对于n取值INT_MIN时。-n并非INT_MAX。这时须要格外小心。

3) 尽量使用移位运算来取代除法运算,加快算法运行的速度。

class Solution {
public:double pow(double x, int n) {// Start typing your C/C++ solution below// DO NOT write int main() functionif(n<0){if(n==INT_MIN)return 1.0 / (pow(x,INT_MAX)*x);elsereturn 1.0 / pow(x,-n);}if(n==0)return 1.0;double ans = 1.0 ;for(;n>0; x *= x, n>>=1){if(n&1>0)ans *= x;}return ans;}
};

leetcode || 50、Pow(x, n)相关推荐

  1. c语言的 pow函数是快速幂吗,leetcode 50. Pow(x, n)(快速幂)

    就是一个二分法快速幂. 但是需要注意的问题是这里是实数,而且n可能为负. int的范围是-2,147,483,648 至 2,147,483,647.如果为-2,147,483,648那么直接n=-n ...

  2. 【分治】LeetCode 50. Pow(x, n)

    LeetCode 50. Pow(x, n) Solution1:我的答案 偷鸡摸狗的做法 class Solution { public:double myPow(double x, int n) ...

  3. 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT、PoW、PoS、DPos

    五篇分布式共识系列文章合集: 分布式共识算法(拜占庭容错算法)的系列整理一:PBFT.PoW.PoS.DPos 分布式共识算法(故障容错算法)系列整理(二):Bully.Gossip.NWR 分布式共 ...

  4. 瑟瑟发抖!2020年博士学位论文将抽查50%、硕士20%!

    转自:考博圈 来源:教育部.科研大匠 编辑:学长 3月2日,教育部在其官网发布了题为:中山大学坚持与国家战略和区域发展同频共振 推动研究生教育内涵建设的简报.简报中指出: 中山大学严把"出口 ...

  5. apache2.4.6支不支持jsp_Spring Boot中文参考指南(2.1.6)50、Kotlin 支持

    上一篇[49.4.测试你的自动配置] 下一篇[52.启用生产就绪功能] 英文原文:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/refer ...

  6. [Leedcode][JAVA][第50题][Pow(x, n)][快速幂][分治][转换类型]

    [问题描述][第50题][Pow(x, n)][中等] 实现 pow(x, n) ,即计算 x 的 n 次幂函数.输入: 2.10000, 3 输出: 9.26100 示例 3:输入: 2.00000 ...

  7. Leetcode 208、实现Trie(前缀树)

    Leetcode 208.实现Trie(前缀树) 使用数组实现前缀树 insert() 向前缀树里面插入字符串 遍历当前要插入的字符串,查看当前数组对应的位置是否为空 如果为空,temp[curr] ...

  8. R语言ggplot2可视化:使用patchwork包(直接使用加号+)将两个ggplot2可视化结果横向组合、接着再和第三个图像横向组合起来(三幅图各占比例为50%、25%、25%)

    R语言ggplot2可视化:使用patchwork包(直接使用加号+)将两个ggplot2可视化结果横向组合.接着再和第三个图像横向组合起来(三幅图各占比例为50%.25%.25%) 目录

  9. 有7克、2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50、90克各一份?

    微软面试题:有7克.2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50.90克各一份?(4种解法) 解法很多,仁者见仁智者见智: 1 ): 把2g和7g砝码放在同一边称量出9g盐 把 ...

最新文章

  1. 14_传智播客iOS视频教程_instancetype
  2. python如何定义一个简单的栈
  3. linux-security-limits
  4. optee运行时来了一个REE(linux)中断--代码导读
  5. 【Java面试题视频讲解】字符串按指定长度分隔
  6. N76E003 工程创建教程
  7. 控制台之console
  8. 途牛旅游系统架构的优化实践
  9. 3D Object Detection入门——PointRCNN代码学习
  10. 深度技术 GHOSTXPSP3 快速装机 2013圣诞节专版
  11. 静态初始化--我的理解
  12. Atitti 过程导向 vs 结果导向 attilax的策略
  13. 教你如何正确使用CSDN下载,福利贴,个别方法免积分
  14. excel删除行闪退_excle2017打开就闪退:excel表格打开闪退怎么办
  15. jquery导入数据_【Python成长之路】从 零做网站开发 -- 基于Flask和JQuery,实现表格管理平台...
  16. 远程桌面连接如何重启计算机,如何使用“远程桌面连接”连接到另一台计算机...
  17. 背景图片,banner图片随屏幕大小变化而变化
  18. 量子计算机采用超导技术吗,新发现的超导体材料可能是量子计算机的硅
  19. 一步一步用debugserver + lldb代替gdb进行动态调试(整理与补充)
  20. ESP8266-Arduino编程实例-OLED显示DHT22传感器数据

热门文章

  1. Android问题-DelphiXE8安装后编译Android提示SDK无法更新问题(XE10也可以解决)
  2. HDU 1003——Max Sum(动态规划)
  3. leetcode第一刷_Construct Binary Tree from Inorder and Postorder Traversal
  4. MYSQL-用户操作
  5. Intent.FLAG_ACTIVITY_CLEAR_TOP 的使用注意
  6. hdu2059:龟兔赛跑
  7. 怎么还不见2005的中文版出来的?
  8. “低端市场”?一线业务员这样看
  9. 国内外交互体验很好的十款验证码
  10. 详解BAT盘根错节的O2O矩阵格局