【LeetCode每日一题】——50.Pow(x, n)

news2024/9/23 17:23:39

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 数学

二【题目难度】

  • 中等

三【题目编号】

  • 50.Pow(x, n)

四【题目描述】

  • 实现 p o w ( x , n ) pow(x, n) pow(x,n) ,即计算 x x x 的整数 n n n 次幂函数(即, 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 / 2 2 1/2^{2} 1/22 = 1/4 = 0.25$

六【解题思路】

  • 使用快速幂算法解决此题,我们可以将 x n x^{n} xn拆解计算,以提高运算速度,可将 x n x^{n} xn拆解为如下形式(//表示向下取整):
    x n = { ( x 2 ) n / / 2 , n  为偶数  x ( x 2 ) n / / 2 , n  为奇数  x^{n}=\left\{\begin{array}{ll} \left(x^{2}\right)^{n / / 2} & , n \text { 为偶数 } \\ x\left(x^{2}\right)^{n / / 2} & , n \text { 为奇数 } \end{array}\right. xn={(x2)n//2x(x2)n//2,n 为偶数 ,n 为奇数 
  • 可以注意到,每次我们只需要将 x x x更新为原来的二次方,指数 n n n变为原来的一半,这样与 x n x^{n} xn是相等的,但是减少了运算的次数,降低了时间复杂度,但是需要注意如果 n n n是奇数时,需要多乘一次 x x x,因为是向下取整。
  • 有了以上思路后,就可以撰写代码了,整个算法流程如下:
    • 初始化 r e s = 1 res = 1 res=1,目的是记录最后一次计算的值,以及当 n n n为奇数时,作为中间变量多乘一次 x x x
    • 因为题目给定的测试用例包括负指数,所以当指数 n n n是负数的时候,将问题转为大于等于0的情况计算,具体包括将 n n n变为正数或0,再将 x x x变为 1 x \frac{1}{x} x1,这在数学中显而易见,不再解释
    • 当指数 n n n不是0的时候就继续循环,如果是0,表示都已经运算结束了,退出循环即可。在循环内部算法流程如下:
      • n & 1 n \& 1 n&1表示判断当前指数 n n n是否是奇数, n & 1 = 1 n \& 1 = 1 n&1=1表示是奇数,用 r e s res res多乘一次 x x x就可以;否则表示是偶数,不用多乘一次 x x x
      • 不管是奇数还是偶数,都要进行 x = x ∗ x x = x * x x=xx这步,表示将 x x x更新为原来的二次方
      • 刚才已经将 x x x更新为原来的二次方,下一步就要将指数 n n n变为原来的一半,这样才可以和 x n x^{n} xn相等。在这里我使用的是位运算右移一位(>>1),当然,使用除法(/)直接除以2也可以
  • 最后返回结果即可

七【题目提示】

  • − 100.0 < x < 100.0 -100.0 < x < 100.0 100.0<x<100.0
  • − 2 31 < = n < = 2 31 − 1 -2^{31} <= n <= 2^{31}-1 231<=n<=2311
  • n 是一个整数 n 是一个整数 n是一个整数
  • − 1 0 4 < = x n < = 1 0 4 -10^{4} <= x^{n} <= 10^{4} 104<=xn<=104

八【时间频度】

  • 时间复杂度: O ( l o g n ) O(logn) O(logn),其中 n n n为传入的底数参数的大小
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {
    public double myPow(double x, int n) {
        if(x == 0.0){
            return x;
        }
        long b = n;
        double res = 1.0;
        if(b < 0){
            b = -b;
            x = 1 / x;
        }
        while(b > 0){
            if((b & 1) == 1){
                res *= x;
            }
            x *= x;
            b >>= 1;
        }
        return res;
    }
}
  1. C语言版
double myPow(double x, int n)
{
    double res = 1.0;
    if(n < 0)
    {
        x = 1 / x;
    }
    while(n != 0)
    {
        if((n & 1) == 1)
        {
            res = res * x;
        }
        x = x * x;
        n = n / 2;
    }
    return res;
}
  1. Python版
class Solution:
    def myPow(self, x: float, n: int) -> float:
        res = 1
        if n < 0:
            n = -n
            x = 1 / x
        while n:
            if n & 1:
                res *= x
            x *= x
            n >>= 1
        return res

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

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

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

相关文章

Exchange漏洞分析:SSRF RCE

0x00 前言 在今年3月份&#xff0c;微软公布了多个Microsoft Exchange的高危漏洞。ProxyLogon是Exchange历史上最具影响力的漏洞之一&#xff0c;有上千台Exchange服务器被植入了webshell后门。 0x01 漏洞描述 CVE-2021-26855是一个SSRF漏洞&#xff0c;利用该漏洞可以绕过E…

一文搞定Nginx的压缩、黑白名单、防盗链、零拷贝、跨域、双机热备等知识

引言早期的业务都是基于单体节点部署&#xff0c;由于前期访问流量不大&#xff0c;因此单体结构也可满足需求&#xff0c;但随着业务增长&#xff0c;流量也越来越大&#xff0c;那么最终单台服务器受到的访问压力也会逐步增高。时间一长&#xff0c;单台服务器性能无法跟上业…

2020网络安全投融资趋势报告

声明 本文是学习2020网络安全投融资趋势报告. 下载地址 http://github5.com/view/55012而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 物联网安全&#xff1a;5G的商业化推动物联网安全加速落地 在应用安全领域&#xff0c;本文共收录投融资事件13起…

IOT云平台 simple(6)springboot netty实现IOT云平台基本的架构(mqtt、Rabbitmq)

本系列教程包括&#xff1a; IOT云平台 simple&#xff08;0&#xff09;IOT云平台简介 IOT云平台 simple&#xff08;1&#xff09;netty入门 IOT云平台 simple&#xff08;2&#xff09;springboot入门 IOT云平台 simple&#xff08;3&#xff09;springboot netty实现TCP Se…

告别Whitelabel Error Page!

相信在JavaWeb开发中不少小伙伴会遇到这个页面吧&#xff0c;特别是初学者基础不扎实不牢固然后网上说的一大堆莫名其妙的解法&#xff0c;千万不要盲目跟着改&#xff0c;建议多读几篇博客&#xff0c;再根据自己的知识分析一下开发流程。首先status404&#xff0c;肯定是我访…

Unity联网多人游戏技术方案调研

关于联网方案 Listen Server (Host) 和 Relay转发服务器游戏包同时包含客户端和服务端逻辑&#xff0c;联网时一个客户端开主&#xff0c;称为Host&#xff0c;其他客户端连入。局域网和互联网都支持。互联网需要有一个匹配服务器帮助找到不同人建立的主机。如果不使用Relay服…

校招前端二面常考react面试题(边面边更)

高阶组件 高阶函数&#xff1a;如果一个函数接受一个或多个函数作为参数或者返回一个函数就可称之为高阶函数。 高阶组件&#xff1a;如果一个函数 接受一个或多个组件作为参数并且返回一个组件 就可称之为 高阶组件。 react 中的高阶组件 React 中的高阶组件主要有两种形式…

verilog学习笔记- 6)verilog基础知识

目录 Verilog 的逻辑值: Verilog 的标识符&#xff08;类似C中的变量名&#xff09;: 1) 定义: 2) 规范建议: Verilog 的数字进制格式: Verilog 的数据类型: 1) 寄存器类型&#xff1a; 2) 线网类型&#xff1a; 3) 参数类型&#xff1a; Verilog 的运算符&#xff1a…

Logistic Regression 逻辑斯蒂回归

文章目录5、Logistic Regression 逻辑斯蒂回归5.1 回归任务5.1.1 MNIST Dataset5.1.2 CIFAR-10 Dataset5.2 Regression vs Classification 回归 vs 分类5.3 Sigmoid functions5.3.1 Logistic Function [0, 1]5.3.2 Other Functions [-1, 1]5.4 Model 模型5.5.1 torch.sigmoid()…

Mybatis基本使用

Mybatis1、Mybatis简介1.1、什么是MyBatis1.2、持久化1.3、持久层1.4、为什么需要Mybatis2、MyBatis第一个程序2.1、代码演示3、CRUD操作3.1、namespace3.2、select3.3、insert3.4、update3.5、delete3.6、思考题4、配置解析4.1、核心配置文件4.2、environments元素4.3、mapper…

点进详情巩固 react-router-dom v6

使用几段代码,再次巩固一下 v6 的使用 0. 安装 npm i react-router-dom1. 配置路由 import {StrictMode } from "react" import ReactDOM from "react-dom/client" import App from "./App" import {HashRouter

Word处理控件Aspose.Words功能演示:使用 C# 将 Word 转换为 HTML

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

实现自定义springboot的starter

引言 学过springboot的肯定用过各种starter&#xff0c;通过这些starter我们可以节省很多没有必要的配置&#xff0c;让项目更简洁&#xff0c;配置起来也更简单。那么starter是怎么开发的呢&#xff1f;这里我通过一个简单的案例演示如何创建一个自己的starter。 初始化项目…

Java毕业生就业系统学生就业统计系统

简介 本项目主要是为了统计毕业生就业情况&#xff08;就业方向分为四种&#xff1a;参加工作&#xff0c;考研&#xff0c;自主创业&#xff0c;待就业&#xff09;&#xff0c;教师可登入该系统查看学生就业情况&#xff0c;包括&#xff1a;考研、职业领域、工作城市&#…

黑马C++ 05 核心项目 —— 职工管理系统

文章目录1. 管理系统需求2. 创建管理类2.1 创建文件 workerManager.h 与 workerManager.cpp2.2 头文件实现 workerManager.h —— 只做函数声明不做实现2.3 源文件实现 workerManager.cpp —— 对声明的函数进行实现3. 菜单功能3.1 添加成员函数 —— workerManager.h添加 void…

Tic-Tac-Toe人机对弈程序(python实现)

目录 1. 前言 2. 处理流程 3. 代码 4. 代码说明 4.1 棋盘显示 4.2 初始化 4.3 人类棋手的下一步 4.4 AI棋手的下一步 4.5 终局及胜负判断 5. 棋局示例 1. 前言 前面几篇博客&#xff08;以循序渐进的方式&#xff09;实现了Tic-Tac-Toe游戏的棋局搜索、遍历以及所有可…

植物大战僵尸:寻找阳光掉落Call调用

通过遍历阳光产生的时间,寻找阳光产生的本地Call,使用代码注入器注入,自定义生成阳光 阳光CALL遍历技巧&#xff1a; 进入植物大战僵尸-> 当出现阳光后->马上搜索未知初始数值返回游戏-> 马上切回CE-> 搜索减少的数值-> 掉一点搜一点最后排查出它的掉落地址-&…

Eureka Server 开启Spring Security Basic认证

概 述 Eureka Server 在实际使用过程中必须考虑安全问题&#xff0c;比如 未认证的用户 不允许其随意调用 Eureka Server的 API&#xff1b;还有一个则是 未认证的 Eureka Client 也禁止其注册到 Eureka Server中来&#xff0c;这些都是可以在工程中进行配置的&#xff0c;当然…

蓝桥杯寒假集训第七天(修改数组)

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目描述&#xff1a; 给定一个已知长度的数组&#xff0c;要求出由其变换而来的一组没有重复数据的数组。假定有一个数组A[0,1,2,3,4]。要求如果A[i]在之前的数组A[0,1,2,3..i-1]之中若出现过&…

关于win11 21H2 升22H2及安装安卓子系统的记载

前言 电脑是i7 7700的&#xff0c;没有TPM2.0。但是喜欢折腾&#xff0c;喜欢win11任务栏的居中&#xff0c;之前win10的时候&#xff0c;会用插件折腾。既然有原生的了&#xff0c;自然更好了。 win11系统升级 关于win11系统下载 直接百度搜索win11系统下载&#xff0c;然…