LeetCode 刷题 --- 快速幂

前言

幂运算是一种常见的运算,求取a^n,最容易想到的方法便是通过循环逐个累乘,其复杂度为O(n),这在很多时候是不够快的,所以我们需要一种算法来优化幂运算的过程。

快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在O(logn)的时间内计算a^n的小技巧。

解释

如下计算公式,无需多言

那么计算一个数的n次幂的时候,就可以将n转化为二进制数,比如计算

因此,计算3^13,只要将对应的二进制位为1的整数幂 乘起来就行了

实现

经过以上的介绍,快速幂的代码实现就比较容易了:

// 计算x 的 n 次幂
public static double fastPow(int x, int n) {// 0的任何次幂都是0if (x == 0) {return 0;}// 非0的零次幂是1if (n == 0) {return 1;}// 负数次幂计算if (n < 0) {x = 1 / x;n = -n;}double res = 1.0;while (n > 0) {// 当前n的最低位不是0,最终结果就要乘以这个值if ((n & 1) == 1) {res *= x;}// 从低到高位进行运算,低位运算完了,就要到高一位了n = n >> 1;// 高一位的值,也就是计算结果要乘以的值。x *= x;}return res;
}

实战

1969. 数组元素的最小非零乘积

思路:

1、首先假设给定三个正整数 a,b,,c,满足 a<b<c,此时需要将某个数缩小 1,另外一个数增加 1,使得 abc 最小,如何选择才是最优选择?---> 最优解其实就是大数加1,小数减1。即(a-1)b(c+1)。

2、回到本题,两个数在进行相同的位交换的时候,本质就是将一个数减小2^k,另外一个数增大2^k,我们可以知道一种贪心思路:进行相同位交换时,优先缩小数组中最小的元素,再增加数组中最大的元素

    public static int minNonZeroProduct(int p) {if (p == 1) {return 1;}// 题目给的取余数int mod = 1000000007;// 数组最后一个值long last = fastPow(2, p, mod) - 1;// 需要计算的数目,注意这里不能用快速幂计算,因为用了余数取模,算出来的数目大于模数的时候就不准了long binarySize = (long) 1 << (p - 1);binarySize = binarySize - 1;// 结果return (int) (fastPow(last - 1, binarySize, mod) * last % mod);}public static long fastPow(long x, long n, int mod) {long res = 1l;while (n > 0) {if ((n & 1) == 1) {res = res * x % mod;}n = n >> 1;x = x * x % mod;}return res;}

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

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

相关文章

JUC并发编程(五)

1、java内存模型 Java内存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;是Java编程语言中用于处理并发编程的一组规则和规范。它定义了Java程序中多线程之间如何交互以及内存如何被共享和访问的规则。它定义了主内存&#xff0c;工作内存的抽象概念&#xff0…

一文让你简单了解跨境电商需要购买堡垒机的几大原因

随着互联网技术的快速发展&#xff0c;跨境电商蓬勃发展&#xff0c;但发展过程中网络安全问题日益凸显。因此不少跨境电商企业购买了堡垒机。这是为什么呢&#xff1f;一文让你简单了解跨境电商需要购买堡垒机的几大原因。 一文让你简单了解跨境电商需要购买堡垒机的几大原因 …

代码随想录day26(2)二叉树:二叉搜索树中的众数(leetcode501)

题目要求&#xff1a;给定一个有相同值的二叉搜索树&#xff08;BST&#xff09;&#xff0c;找出 BST 中的所有众数。结点左子树中所含结点的值小于等于当前结点的值&#xff0c;结点右子树中所含结点的值大于等于当前结点的值。 思路&#xff1a;如果不考虑二叉搜索树&#…

TCP机械臂控制

通过w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 注意&#xff1a;关闭计算机的杀毒软件&#xff0c;电脑管家&#xff0c;防火墙 1&#xff09;基于TCP服务器…

博途PLC 高速计数器复位功能块(HC_Reset)

高速计数器的使用和编码器应用请参考下面文章链接: 1、普通开关计米功能块(博途高速计数器应用) https://rxxw-control.blog.csdn.net/article/details/132354435https://rxxw-control.blog.csdn.net/article/details/1323544352、S7-1200PLC编码器转速测量功能块(高速计数…

含“AI”量上涨,智能模组SC208系列助力智慧零售全场景高质发展

AI正重塑智慧零售产业&#xff0c;加速零售在采购、生产、供应链、销售、服务等方面改善运营效率和用户体验。零售行业经历了从线下到线上再到全渠道融合发展过程&#xff0c;“提质、降本、增效、高体验”是亘古不变的商业化与智能化方向。含“AI”量逐渐上涨的智慧零售正经历…

Git——IDEA中的使用详解

目录 Git1、IDEA中配置Git2、将本地项目推送到远程仓库2.1、创建项目远程仓库2.2、初始化本地仓库2.3、连接远程仓库2.4、提交到本地仓库2.5、推送到远程仓库 3、克隆远程仓库到本地4、基本操作4.1、代码提交到暂存区4.2、暂存区代码提交到本地库4.3、推送到远程仓库4.4、撤销本…

leetCode刷题 18. 四数之和

目录 注意&#xff1a;正常提交后有问题。 1. 思路 2. 解题方法 2.1 排序数组 2.2 双指针遍历 3. 复杂度 4. Code 题目&#xff1a; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], …

TouchGFX之性能测量

TouchGFX Core开放了几个信号&#xff0c;可用于测量性能。 当这些信号在内部触发时&#xff0c;用户可在应用程序中同步触发单个GPIO&#xff0c;从而实现“渲染时间”和其他有用信号的可视化。 信号在GPIO.hpp中定义 /* 用于操作GPIO的接口类&#xff0c;以便在目标硬件上进…

力扣---完全平方数

思路&#xff1a; 还是比较好想的&#xff0c;g[i]定义为和为 i 的完全平方数的最少数量。那么递推关系式是g[i]min(g[i-1],g[i-4],g[i-9],...)1&#xff0c;数组初始化是g[0]0,g[1]1。注意这里要对g[0]初始化&#xff0c;&#xff08;举个例子&#xff09;因为在遍历到g[4]时&…

基于Springboot+Vue3的大学生毕业作业设计之—招投标分析系统

有系统开发需求可私信我提供帮助哦 ~ 部分 import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.L…

七、Java中SpringBoot组件集成接入【Minio文件服务器】

七、Java中SpringBoot组件集成接入【Minio文件服务器】 1.Minio介绍2.搭建Minio服务2.1Windows部署2.2Linux部署2.3docker部署 3.Minio可视化操作4.SpringBoot接入Minio1.添加maven依赖2.yaml配置文件3.配置类4.工具类5.控制类 5.常见问题6.其他参考文章 1.Minio介绍 对象存储…

解决vue3中刷新浏览器页面的axios请求状态变为canceled

最近在开发中要加一个悲观锁的功能&#xff0c;具体需求是&#xff1a;用户1和用户2不能同时打开一个模型进行编辑&#xff0c;用户1优先进入模型后&#xff0c;要对该模型进行上锁&#xff0c;关闭该模型或刷新页面时要进行解锁&#xff0c;此时在刷新页面时出现了问题。 刷新…

英伟达 GTC 2024大会不可错过的亮点!带你一窥AI和高性能计算的最新趋势!

会议之眼 快讯 2024年的英伟达GTC大会再次掀起了科技界的热潮&#xff0c;展示了该公司在人工智能、图形处理和高性能计算领域的最新突破。来自全球各地的科技领袖、工程师和创新者齐聚一堂&#xff0c;共同探讨未来技术的前沿。在这令人期待的盛会上&#xff0c;英伟达发布了一…

GraalVM详细安装及打包springboot、java、javafx使用教程(打包javafx项目篇)

前言 在当前多元化开发环境下&#xff0c;Java作为一种广泛应用的编程语言&#xff0c;其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱&#xff0c;而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而&#xff…

Windows东方通下载及使用

把安装包都拖到桌面来&#xff0c;可以拖一个解压包进去 下载东方通可以不用配环境变量 双击安装包 下一步 点击接受 选择版本&#xff0c;都可以 选择安装路径 下一步 点击安装 改端口号 移到桌面 把安装包里面的文件拖进去 过期了&#xff0c;记得改时间 点击时间面板&…

Google云计算原理与应用(四)

目录 七、海量数据的交互式分析工具Dremel&#xff08;一&#xff09;产生背景&#xff08;二&#xff09;数据模型&#xff08;三&#xff09;嵌套式的列存储&#xff08;四&#xff09;查询语言与执行&#xff08;五&#xff09;性能分析&#xff08;六&#xff09;小结 八、…

【考研数学】全年复习懒人包+资料分享

题主要真是能把这两样做透了&#xff0c;别说90&#xff0c;120都不是问题呀&#xff01;那么我们就先来说说你如何能把这1800做透吧。这可是人称考研数学路上最厚的一本习题册了。经常有人是做到一半就被劝退的&#xff01;假设你是挑题出来做&#xff0c;那也行&#xff0c;不…

Git Bash命令初始化本地仓库,提交到远程仓库

git init&#xff1a;初始化空仓库 // 初始化一个空仓库或者重新初始化一个存在的仓库 git init git remote // 为当前本地仓库添加一个远程仓库地址 git remote add origin https://gitee.com/xxx/demo.git git pull // 从设置好链接的远程仓库拉去已经存在的数据&#xff0c;…

centos7安装openGauss数据库

官网手册&#xff1a; https://opengauss.org/zh/download/ 操作系统选择centos&#xff0c;软件包类型选择极简版&#xff1a;https://opengauss.obs.cn-south-1.myhuaweicloud.com/5.0.1/x86/openGauss-5.0.1-CentOS-64bit.tar.bz2 硬件&#xff1a;2c4g 安装手册&#xf…