LeetCode-50-Pow(x, n)

news/2024/11/20 21:18:58/

在这里插入图片描述

1、递归

我们最简单的思路就是使用递归,每次就让x乘上Pow(x, n-1)的值。但是这样做的缺点在于递归时间过长会导致超时,因此我们可以使用快速幂进行优化。

快速幂的思想在于我们在求x的N次幂时,不使用x∗xN−1x*x^{N-1}xxN1,而是使用xN/2∗xN/2x^{N/2}*x^{N/2}xN/2xN/2从而减少递归次数至O(logN)O(logN)O(logN)

class Solution {
public:double quickMul(double x, long long N) {if (N == 0) {return 1.0;}double y = quickMul(x, N / 2);return N % 2 == 0 ? y * y : y * y * x;}double myPow(double x, int n) {long long N = n;return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);}
};

2、迭代

我们可以将xnx^nxn拆成多个x2kx^{2^k}x2k项之和,例如x77=x1∗x4∗x8∗x64x^77=x^1*x^4*x^8*x^{64}x77=x1x4x8x64,而77的二进制表示恰好为100110110011011001101,其中二进制上每个1的位置表示了有哪些x2kx^{2^k}x2k需要相加,我们可以基于这一特点来设计迭代过程。

class Solution {
public:double quickMul(double x, long long N) {double ans = 1.0;// 贡献的初始值为 xdouble x_contribute = x;// 在对 N 进行二进制拆分的同时计算答案while (N > 0) {if (N % 2 == 1) {// 如果 N 二进制表示的最低位为 1,那么需要计入贡献ans *= x_contribute;}// 将贡献不断地平方x_contribute *= x_contribute;// 舍弃 N 二进制表示的最低位,这样我们每次只要判断最低位即可N /= 2;}return ans;}double myPow(double x, int n) {long long N = n;return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);}
};

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

相关文章

我们真的需要把训练集的损失降到零吗?

在训练模型的时候,我们需要将损失函数一直训练到0吗?显然不用。一般来说,我们是用训练集来训练模型,但希望的是验证机的损失越小越好,而正常来说训练集的损失降到一定值后,验证集的损失就会开始上升&#x…

Day2多种抓包工具介绍以及使用封包监听工具找到挑战数据包实现发送数据包进行挑战

工具相关证书安装指南 Charles https://blog.csdn.net/weixin_45459427/article/details/108393878 Fidder https://blog.csdn.net/weixin_45043349/article/details/120088449 BurpSuite https://blog.csdn.net/qq_36658099/article/details/81487491 Fiddler: 是一…

Markdown格式表情包大全最新整理分享

Markdown表情包一、前言❤️二、Emoji表情大全👮People(人物)❄️Nature(自然)🔔Objects(物体)🏠Places(地点)🔟Symbols(符…

前端面试题集锦(1)

1、 rem em vw vw 百分比区别 2、app怎么做适配的 3、bfc是什么,清除浮动的原理 4、简单的一个盒子移动到另一个盒子,你用什么方式实现动画效果 5、css 选择器有哪些,权重是什么样的 6、CSS选择符有哪些?哪些属性可以继承&am…

面试:Android中的HOOK方案

Hook方案很多 方案作用时机操作对象优点缺点要求APT编译时:java文件还未编译成class文件.java文件1.可以织入所有类;2.编译时代理,减少运行时消耗1.需要使用apt编译器编译;2.需要手动拼接代理代码(可以使用Javapoet弥补&#xff…

Python预测卡塔尔世界杯身价最高的英格兰要夺冠?!

文章目录🏳️‍🌈 1. 数据🏳️‍🌈 2. 绘图2.1 绘制表头2.2 绘制排名、球队以及国旗2.3 绘制身价柱状图2.4 绘制FIFA排名散点图2.5 设置背景2.6 设置标题🏳️‍🌈 3. 更多可视化项目源码数据:大…

vue 新增枚举类型栏位

dict-tag 标签新增枚举类型栏位 新增栏位数据字典 新增字典命名规范为coin_表字段名 新增字典枚举数据,key value Value标签格式为 值-key 如 1-成交 分别对应的新增为两张表: Sys_dict_type --字典类型 Sys_dict_data --字典数据 前端栏位 <el-form-item label…

线程暂停挂起和停止的最佳实践

//取消信号 CancellationTokenSource Task_TokenSource; //暂停信号 ManualResetEvent Task_ResetEvent; //开启 Task_ResetEvent new ManualResetEvent(true); Task_TokenSource new CancellationTokenSource(); …