LeetCode——Pow(x, n)

news/2024/12/2 20:01:04/

一、题目

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

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

示例 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⁻² = 1/2² = 1/4 = 0.25

提示:

  • -100.0 < x < 100.0
  • -2³¹ <= n <= 2³¹-1
  • n 是一个整数
  • 要么 x 不为零,要么 n > 0 。
  • -10 <= x <= 10

 二、题目解读

题目要求我们实现 pow(x, n) 函数,即求解x的n次方,当n过大时,肯定是会超时的,这时我们便需要使用到快速幂。

介绍快速幂:

众所周知,如果我们要求a的n次方,最朴素的想法一定是把它们乘起来,这样的复杂度是O(n),显然太差了。

然后我们想到一种优化,如果我们能求得 2的k次方=n的话,我们只需要将a的平方相乘k次,这样的复杂度是O(log2n),但是我们很难找到这样的k。

于是我们将这一想法再一次优化,我们只要能找到 2的k1次方+2的k2次方+...=n就好了,这样的复杂度还是O(log2n)

这一想法可以通过数的二进制位运算轻易解决,比如9的二进制是1001,也就是从右往左数第i位,我们的答案就乘上a的2的i次方

于是就有了快速幂算法。

三、代码

class Solution {public double myPow(double x, int n) {return Math.pow(x,n);}
}

 看到一个段子😂

面试的时候遇到这个题目,

然后我思考🤔了片刻,写出了 return pow(x,n);

面试官问我,为啥这么写?

我说,这是软件工程的代码复用;不重复造轮子;

于是,面试官就要把我挂了😂;

说了一句,我们决定复用公司原来的员工(❁´◡`❁)。

 二进制快速幂:

class Solution {public double myPow(double x, int n) {boolean neg=n<0;//判断n是正数还是负数double ans=1;for(long m=Math.abs((long)n);m!=0;m>>=1){if(m%2==1){ans*=x;}x=x*x;}return neg?1/ans:ans;//负数返回ans的倒数}
}

二分思想递归,复杂度是对数级的。

class Solution {public double myPow(double x, int n) {if (n == 0) {return 1;}if (n == 1) {return x;}if (n == -1) {return 1 / x;}double half = myPow(x, n / 2);double rest = myPow(x, n % 2);return half * half * rest;}
}

快速幂递归

class Solution {public double myPow(double x, int n) {//x的0次方为:1if(n==0) return 1.0;//x的1次方为本身:xif(n==1) return x;//x的-1次方为本身的倒数:1/Xif(n==-1) return 1.0/x;//如果n为偶数 -> 2^10 = 2^5 * 2^5 double temp = myPow(x,n>>1);double res = temp*temp;return res*myPow(x,n&1);}
}

 

 


http://www.ppmy.cn/news/157325.html

相关文章

大数据Doris(三十二):HDFS Load和Spark Load的基本原理

文章目录 HDFS Load和Spark Load的基本原理 一、HDFS Load 二、 Spark Load的基本原理 HDFS Load和Spark Load的基本原理 一、HDFS Load HDFS Load主要是将HDFS中的数据导入到Doris中,Hdfs load 创建导入语句,导入方式和

win11安装VMware的顺畅之路

第一步&#xff1a;检查电脑是否支持虚拟化 1、任务管理器---->性能---->CPU 第二步&#xff1a;安装VMware&#xff0c;查看VMnet1和VMnet8是否存在 1、控制面板---->网络和Internet---->网络和共享中心---->更改适配器设置 2、VMnet1和VMnet8---->属性-…

【技术向】DIY SM2262en 1TB固态,量产开卡+软件分享

这两是今天的主角。我们所用到的材料就是4颗三星的LPDDR3单颗4GB的芯片&#xff0c;2颗东芝512GB的BICS3闪存&#xff0c;2颗DDR3 1G的16位缓存以及海鲜市场买的拆机主控板。 先把板子清理干净&#xff0c;这板子海鲜市场卖13元一张&#xff0c;上面掉了很多原件。我都补齐了。…

100台电脑无盘服务器配置,100台网吧无盘系统配三星840PRO方案解读

在投入大量的前期启动资金之后&#xff0c;如何尽快收回成本&#xff0c;促成网吧进入全面赢利的阶段是每个网吧业主密切关心的运营问题&#xff0c;而一个网吧人气热不热&#xff0c;营业额如何&#xff0c;又与网吧无盘系统的表现密切相关。无盘系统在经过多年的发展之后&…

服务器配置pxe批量装系统,可能是最简单的PXE批量装机方案

PXE(Preboot eXecution Environment,预启动执行环境),提供了一种使用网络接口启动电脑的机制,让客户机通过网络从服务器获取镜像文件。这种机制让电脑的启动可以不依赖本地数据存储设备(如硬盘、U盘)或本地已安装的操作系统,并且支持多台电脑同时部署系统。 目前PXE广泛应用…

三星450r5j设置U盘启动

装Ubuntu时遇到的问题&#xff0c;也不算大问题&#xff0c;但感觉略坑。 首先开机时按下F2&#xff0c;然后进入如下界面 然后选择Boot&#xff0c;将第一项Secure Boot Control设置成off&#xff0c;然后选择最长的一项&#xff1a;CSM and UEFI OS&#xff0c;然后将最后一…

三星固态驱动安装失败_三星SSD无法安装Win10无法启动解决方案

三星固态驱动器以其出色的性能而闻名. 它是许多用户喜欢的固态驱动器之一,但是购买三星固态驱动器的朋友可能会发现一个问题,即他们无法安装Win10,或者在安装Win10之后无法启动?那么您可能忽略了一些问题. 以下编辑器将与您分享三星SSD无法安装Win10或无法启动的解决方案 原…

s5pv210三星官方Uboot分析(USB启动方式)

首先要了解210板子的内存配置情况&#xff0c;我的板子是512M内存&#xff0c;DMC0上接了256M&#xff0c;DMC1接了256M&#xff0c;为了保证地址连续&#xff0c;内存地址只能是0x30000000 ~ 0x4FFFFFFF 第一步运行start.S&#xff1a; _TEXT_BASE:.word TEXT_BASE//存放基址…