力扣算法数学类—剑指 Offer 16. 数值的整数次方

news2024/12/23 13:55:05

目录

剑指 Offer 16. 数值的整数次方

题解:

知识点:

代码:

结果:


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

题解:

快速幂的思想:

将指数11 可以转成二进制数1011,则原来的式子可以转化成

 

此时只运算了3次乘积,时间复杂度降至O(logn)

  1. 首先判断底数x是否为0,如果是0则直接返回0
  2. 将指数n转化为长整型变量b,避免在处理负数时出现溢出问题
  3. 初始化结果res为1.0
  4. 如果指数b小于0,说明底数x取倒数,同时将指数b取相反数
  5. 进入循环,当指数b大于0时继续执行循环体内的操作
  6. 使用位运算判断指数b的最后一位是否为1,如果是1则将结果res乘以底数x
  7. 更新底数x为x的平方
  8. 将指数b右移一位,相当于将其除以2
  9. 循环结束后返回结果res

利用了位运算来判断指数的最后一位是否为1,从而确定是否需要乘以底数x。同时,通过不断平方底数x和右移指数b,实现了快速求幂的效果

知识点:

位运算:

位运算是计算机中对二进制数据进行操作的一种运算方式。它直接在二进制位上进行操作,可以高效地进行一些常见的运算,如与、或、异或和移位等。

以下是一些常用的位运算符:

  • 与运算(&):按位进行与运算,两个位都为1时结果为1,否则为0。
  • 或运算(|):按位进行或运算,两个位中只要有一个为1时结果为1,否则为0。
  • 异或运算(^):按位进行异或运算,两个位相同为0,不同为1。
  • 非运算(~):按位进行非运算,将每个位取反。
  • 左移运算(<<):将二进制数向左移动指定的位数,相当于乘以2的幂。
  • 右移运算(>>):将二进制数向右移动指定的位数,相当于除以2的幂。

位运算在计算机领域的应用非常广泛,包括但不限于以下方面:

  • 位掩码:使用位运算来创建、修改和查询特定位的值,用于标记或设置某些状态。
  • 压缩算法:利用位运算来压缩数据,减少存储空间。
  • 加密和解密:位运算可用于实现加密和解密算法中的位级操作。
  • 优化算法:某些算法可以使用位运算进行优化,例如快速求幂、快速排序等。

代码:

class Solution {
    public double myPow(double x, int n) {
        if(x==0) return x;
        long b=n;//将指数n转化为长整型变量b,避免在处理负数时出现溢出问题。
        //负数幂
        if(b<0){
            x=1/x;
            b=-b;
        }
        double res=1.0;
        //快速幂思想(二进制角度)
        while(b>0){
            if((b&1)==1){
                res*=x;
            }
            x*=x;
            b>>=1;
        }
        return res;
    }
}

结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/801028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

向量数据库这杯“啤酒”与“泡沫”

就像啤酒注定要有泡沫&#xff0c;每一场淘金热都不缺被捧上了时代风口的人。 大模型这一波热潮中&#xff0c;向量数据库就是那个幸运儿。 一方面&#xff0c;技术层面并没有太大突破。向量数据库并不是一种特别新的数据库技术&#xff0c;在AI领域已经应用了七八年&#xff0…

英特尔14代酷睿参数曝光:13代酷睿用户看完放心了 升级幅度有限

今年6月份英特尔进行了品牌升级&#xff0c;宣布新命名规则&#xff0c;预热了酷睿Ultra品牌和第14代酷睿处理器产品线。 代号为Meteor Lake的酷睿Ultra系列虽然备受关注&#xff0c;但令人遗憾的是&#xff0c;它只面向低功耗移动端&#xff0c;预计将包括45W的H系列&#xff…

NLP From Scratch: 使用char-RNN对姓氏进行分类

NLP From Scratch: 使用char-RNN对姓氏进行分类 本篇我们将构建并训练基本的字符级 RNN 来对单词进行分类。 本教程&#xff0c;以及后续两个教程&#xff0c;展示了如何“从头开始”针对 NLP 建模过程中所需的数据进行预处理&#xff0c;抛开torchtext的许多便利功能进行编码…

C语言基础教程(fgets和fputs)

文章目录 前言一、fputs函数二、fgets函数三、fputc和fgetc函数总结 前言 本篇文章我们来讲解一下fgets和fputs函数&#xff0c;这两个函数通常用来作为输入和输出功能使用。 一、fputs函数 fputs函数是C语言标准库中的一个输出函数&#xff0c;用于将字符串写入到指定的文件…

mysql主从同步怎么跳过错误

今天介绍两种mysql主从同步跳过错误的方法&#xff1a; 一、两种方法介绍 1、跳过指定数量的事务&#xff1a; mysql>slave stop; mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER 1 #跳过一个事务 mysql>slave start2、修改mysql的配置文件&#xff0c;通过slav…

The Sandbox 重新上线,带来全新体验!

在经历了一个充满史诗般新回忆的全力开局后&#xff0c;我们短暂休息了片刻&#xff0c;为玩家准备了全新的、惊心动魄的游戏活动。 我们已经完成了功能的微调&#xff0c;准备将您的游戏体验提升到一个全新高度&#xff01; 想知道我们正在做什么吗&#xff1f;现在还无法公开…

iTOP-STM32MP157开发板Linux Misc驱动-编译驱动程序

这里我们以 stm32mp157 开发板为例&#xff0c;将杂项设备驱动编译成模块&#xff0c;请参考本手册第三十七章 Linux 内核模块。我们将 misc.c 文件拷贝到 Ubuntu 的/home/nfs/03 目录下。将上次编译 helloworld 的 Makefile 文 件拷贝到 misc.c 同级目录下&#xff0c;修改 …

指针学习(特殊指针)

1.char型指针 char型指针实质上跟别的类型的指针并无本质区别&#xff0c;但是C语言中的字符串以字符数组的方式存储&#xff0c;而数组在大多数场合又会表现为指针&#xff0c;因此字符串在绝大多数场合就表现为char型指针。 例如&#xff1a; char *p "abcd"; …

axios的如何使用

1、axios的使用第一步先装包 npm i axios-S 2、axios的使用方法&#xff0c;先导入包&#xff0c;再绑定事件&#xff0c;再注册事件 3、axios如何实现post请求 4、Vue挂载axios,简便输入地址&#xff1a; 5、通过this实例&#xff0c;可以访问到axios的链接 6、给他改成$http…

【李宏毅 DLHLP 深度学习人类语言处理 HW1】

李宏毅 DLHLP 深度学习人类语言处理 HW1 相关资料HW1 语音小白在网上没有找到这门课的作业分享&#xff0c;那就记录一下自己的作业吧。 相关资料 课程官网&#xff1a;https://speech.ee.ntu.edu.tw/~hylee/dlhlp/2020-spring.php 作业github代码1&#xff1a;https://githu…

用抓包工具结合局域网代理技术爬取meituan某些商家的数据

众所周知&#xff0c;爬虫玩的好&#xff0c;牢饭吃的早&#xff08;如有侵犯利益&#xff0c;请您告知&#xff0c;我将立删&#xff01;&#xff09;。 其实抓包嘛&#xff0c;简单的H5网页直接就能用浏览器的开发者工具进行抓包&#xff0c;但是很多平台剔除了网页版&#…

《面试1v1》Kafka与传统消息系统区别

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

C语言:动态版本通讯录(静态版本的改进)

文章目录 一、改进方向1.结构2.初始化3.增加联系人and检查容量4.退出 二、代码实现总结 通讯录静态版本的实现思路与完整代码 一、改进方向 对于管理数据&#xff0c;我们主要进行增删查改操作&#xff0c;我们要改进静态版本的通讯录&#xff0c;主要在于增加数据方向。而删除…

C++数组、向量和列表的练习

运行代码&#xff1a; //C数组、向量和列表的练习 #include"std_lib_facilities.h"int main() try {int ii[10] { 0,1,2,3,4,5,6,7,8,9 };for (int i 0; i < 10; i)//把数组中的每个元素值加2ii[i] 2;vector<int>vv(10);for (int i 0; i < 10; i)vv…

Transformer模型简单介绍

Transformer是一个深度学习模型。主要功能通俗的来说就是翻译。输入&#xff0c;处理&#xff0c;输出。 https://zhuanlan.zhihu.com/p/338817680 大牛写的很完整 目录 总框架Encoder输入部分注意力机制前馈神经网络 Decoder 总框架 Encoders: 编码器Decoders: 解码器 Encoder…

AT指令介绍

一、基础知识 1、用途&#xff1a;用来控制TE&#xff08;TerminalEquipment&#xff09;和MT(Mobile Terminal)之间交互的规则&#xff0c;如下图所示。在GSM网络中&#xff0c;用户可以通过AT命令进行呼叫、短信、电话本、数据业务、传真等方面的控制。&#xff08;AT指令只…

BUG:pm2启动verdaccio报错:Invalid or unexpected toke

输入命令&#xff1a; pm2 state verdaccio 问题描述&#xff1a; pm2 logs verdaccio报错翻译&#xff1a;数据格式错误 导致我呢提原因&#xff0c;没有找到运行文件&#xff0c; 发现问题&#xff1a;因为命令默认查找verdaccio是去系统盘查找。 解决方式 1&#xff1a;…

探索单例模式:设计模式中的瑰宝

文章目录 常用的设计模式有以下几种&#xff1a;一.创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;二.结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;三.行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a;四.并发…

js逆向中高级案例-文章标题汇总

一、详细文章 点击链接查看如图案例标题

Tensorflow benchmark 实操指南

环境搭建篇见环境搭建-CentOS7下Nvidia Docker容器基于TensorFlow1.15测试GPU_东方狱兔的博客-CSDN博客 1. 下载Benchmarks源码 从 TensorFlow 的 Github 仓库上下载 TensorFlow Benchmarks&#xff0c;可以通过以下命令来下载 https://github.com/tensorflow/benchmarks 我…