首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LeetCode刷题DAY 14:x的n次幂函数

难度:中级 关键词:递归、自治算法 题目重点:时间复杂度从O(N)降到O(logN) 1 题目描述 编辑一个函数,计算x的n次幂。如:输入2.00000,10,输出9.26100。...x的n次幂,就是n个x相乘,可以通过for循环实现该目的,时间复杂度为O(N),如何把时间复杂度降到O(logN),是该题重点。...思路:递归、自治算法 定义该函数为pow(x,n),如果要计算2的10次幂(pow(2,10)),相当于计算2的5次幂乘以2的5次幂(pow(2,5)*pow(2,5)),2的5次幂又等于2的2次幂乘以...2的2次幂乘以2 (pow(2,2)*pow(2,2)*2),以此类推,发现这个问题可以用递归解决,并且每次只需要计算一半的数据,直到n为0作为递归的出口。...每次计算一半的思想类似于二分法,二分法也是典型的时间复杂度为O(logN)的算法,因此应建立O(logN)与二分法的思维关联。

1.4K10

幂函数与指数函数的区别

幂函数具有以下性质:当指数 $n$ 为正数时,幂函数表示计算底数 $x$ 乘以自身 $n$ 次的结果。例如,$x^2$ 表示 $x$ 的平方,$x^3$ 表示 $x$ 的立方。...当指数 $n$ 为负数时,幂函数表示计算底数 $x$ 的倒数的绝对值乘以自身 $n$ 次的结果。例如,$x^{-1}$ 表示 $x$ 的倒数,$x^{-2}$ 表示 $x$ 的平方的倒数。...指数函数的定义与性质指数函数是一种以常数为底的幂函数,即 $f(x) = a^x$,其中 $a$ 为常数。指数函数具有以下性质:当底数 $a$ 大于 $1$,指数函数表示 $a$ 的 $x$ 次幂。...例如,$2^x$ 表示 $2$ 的 $x$ 次幂,$e^x$ 表示自然对数的 $x$ 次幂。当底数 $a$ 介于 $0$ 和 $1$ 之间时,指数函数表示 $a$ 的负 $x$ 次幂的倒数。...例如,$0.5^x$ 表示 $0.5$ 的 $x$ 次幂的倒数,$10^{-x}$ 表示 $10$ 的负 $x$ 次幂的倒数。指数函数具有非交换性,即 $a^x ≠ x^a$。

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    对Java Stack的一次探索

    由此让我好奇几个问题 Java 最多可以创建多少线程? Java 控制线程大小选项 -Xss 的具体含义是什么? Java 的选项 -Xmx -Xms 控制堆的选项对线程创建有无影响?...Java 的线程具体是怎么实现的? 探索 其实这几个问题是相互交错的,在查询过程中很多答案对这几个问题都有涉及,因此下面很多链接并不仅仅是针对某一个问题,更是一个一般的描述。...Java 线程直接map的 OS 的 native thread[^1] [^2], 因此Linux 对线程的限制也就限制了 Java 可以创建的线程。...第三个问题,-Xmx 与 -Xms 决定了Java 使用堆的大小,一直有人说将两者设为一样大小可以让Java 在启动时就分配好,可以防止后续堆的抖动,但就我实验来看,堆并没有在一开始就分配了,选项这样设置应该只能控制堆可以分配的最大值...由于java的大对象都分配在堆上,因此没什么好办法耗尽栈内存,但可以看出栈在初始化时是很小的,更大的影响因素还是Linux的线程数限制。

    1.5K30

    配置Java web的一次经历

    最近在完成数据库作业,重新拾起了以前学过的Java,讲下自己的 Java web 配置过程。...2.在 eclipse 中配置 Tomcat 我们这里使用 eclipse 的企业版本(即 Java EE 版本),不然其他版本是不带有 web 开发功能的,或者你也可以使用普通版本在 eclipse...点击 Preference -> Server -> Runtime Environments -> Add 选项,添加需要的 Tomcat 版本,然后选择找到刚才下载解压后的Tomcat文件,这样便将环境配置好了...3.导入其他项目报错的问题 如果是导入其他人的项目时,很容易出现 HttpServletRequest 不能引用的错误,原因是因为工程里面 web-inf/lib 目录下少了相应的包: Package...这个文件是我们在自己机器上配置的 Tomcat,当拷贝项目时,配置文件并不会也拷贝过来,我们在导入项目后做如下更改: Project -> Properties -> Java Build Path -

    42130

    一次 Java 内存泄漏的排查

    好几次值班组的小伙伴们一起吐槽,商量着怎么避过服务保活机制,偷偷停了探测服务而不让人发现(虽然也并不敢)。 前些天我就在周末处理了一次探测服务的锅。...我们的 Java 进程,并不做大量 CPU 运算,正常情况下,CPU 应该在 100~200% 之间,出现这种 CPU 飙升的情况,要么走到了死循环,要么就是在做大量的 GC。...使用 jstat -gc pid [interval] 命令查看了 java 进程的 GC 状态,果然,FULL GC 达到了每秒一次。...堆文件都是一些二进制数据,在命令行查看非常麻烦,Java 为我们提供的工具都是可视化的,Linux 服务器上又没法查看,那么首先要把文件下载到本地。...由于我们设置的堆内存为 4G,所以 dump 出来的堆文件也很大,下载它确实非常费事,不过我们可以先对它进行一次压缩。

    63440

    分享一次 Java 内存泄漏的排查

    好几次值班组的小伙伴们一起吐槽,商量着怎么避过服务保活机制,偷偷停了探测服务而不让人发现(虽然也并不敢)。 前些天我就在周末处理了一次探测服务的锅。 问题 网络问题?...我们的 Java 进程,并不做大量 CPU 运算,正常情况下,CPU 应该在 100~200% 之间,出现这种 CPU 飙升的情况,要么走到了死循环,要么就是在做大量的 GC。...使用 jstat -gc pid [interval] 命令查看了 java 进程的 GC 状态,果然,FULL GC 达到了每秒一次。 ?...堆文件都是一些二进制数据,在命令行查看非常麻烦,Java 为我们提供的工具都是可视化的,Linux 服务器上又没法查看,那么首先要把文件下载到本地。...由于我们设置的堆内存为 4G,所以 dump 出来的堆文件也很大,下载它确实非常费事,不过我们可以先对它进行一次压缩。

    83310

    记一次 JAVA 的内存泄露分析

    通过 JDK 自带的 jmap 工具,查看一下 JAVA 应用中具体存在了哪些对象,以及其实例数和所占大小。...具体命令如下: jmap -histo:live `pid of java` # 为了便于观察,还是将输出写入文件 jmap -histo:live `pid of java` > /tmp/jmap00...可是该回调匿名类在 http 回调结束后,引用关系就没了,在下一次 GC 理应被回收才对。...回调类在 Eden 区就会被及时的回收掉。old 区也没有持续的增长情况了。这一次的内存泄露问题算是解决了。 总结 关于内存泄露问题在第一次排查时,往往是有点不知所措的。...我们需要有正确的方法和手段,配上好用的工具,这样在解决问题时,才能游刃有余。当然对JAVA内存的基础知识也是必不可少的,这时你定位问题的关键,不然就算工具告诉你这块有错,你也不能定位原因。

    2.6K50

    一次java.lang.NullPointerException的排查之旅

    问题由来 最近在项目中遇到了一个比较奇怪的java.lang.NullPointerException,就是说在自己的本地环境中,功能正常,运行无异常。...查看测试环境服务器的日志打印,整体上的日志并没有什么异常之处,但是仔细查看日志会找到有一段异常信息 序列化出错java.lang.NullPointerException 那么回到对应的controller...OrderClueRuleController.java 查看对应156行内容 为了更好的打印错误日志,在本地项目中这里将异常信息通过 e.printStackTrace(); 打印出来。...于是重新更新了本地代码,终于复现了问题,本地打印了异常信息代码行数 我们在对应的OrderClueRuleController.java:149 打上debug再次查看具体问题 入参是没有问题的...通常情况下遇到这样的java.lang.NullPointerException 异常都会想到入参是否未传,而不太会去注意入参的调用 bean是否为 null。

    13810

    Java中一次对象的自我拯救探究

    《深入理解java虚拟机》第二版 67页,一次对象自我拯救这个例子很不错,在这里分享出来。 并且从源码角度进行分析。...代码如下: /** * 1 对象可以在被GC时自我拯救 * 2 这种自救机会只有一次,因为一个对象的finalize()方法最多只会被系统自动调用一次 * Created by 明明如月 on 2017...Java编程语言并不保证哪一个线程来调用某个对象的finalize方法。 finalize方法只会被Java虚拟机调用一次。...---- 主方法中,上半段和下半段代码相同,可是一次逃脱成功,一次逃脱失败,是因为任何一个对象的finalize()方法只会被系统自动调用一次,如果对象再次面临回收,他的finalize()方法不会再次被执行...finalize()能做的工作通过try-finally或者其他方式也可以做得更好、更及时,所以请淡忘这个方法。 这一点和Java源码中的解释有点冲突,仅供参考,读者自己取舍就好。

    42320

    gRPC- Go和Java的一次HelloWorld

    都说grpc是跨语言的一个rpc框架,当团队内部有多种流行编程语言时,那么grpc可以为他们提供通信,今天我们就通过一个Hello World来看看Java和Go是怎么通信的,一起实践吧,只有亲身实践才能更好的掌握...tree/master/grpc 我们以Go作为服务端,Java作为客户端 Go实现服务端 准备好Go版的proto文件 ?...到次为止,Go服务端启动完成,接下来我们准备Java客户端代码 Java实现客户端 准备好Java版的proto文件,和Go版的区别是多了一些Java的选项,其余的不能改变 ? ?...开始根据proto文件编译生成java文件,如下图所示,依次点击红色的插件 编写客户端文件,连接Go的服务端,发起请求 ?...我们以Java作为服务端,Go作为客户端 Java实现服务端 上面Java客户端生成的文件不要动,另写一个服务的实现类,代码如下 ? 写一个main方法启动服务端,代码如下 ?

    1.2K10

    Java一次编译,到处运行如何实现的?

    Java是一种高级语言,要让计算机执行你撰写的Java程序,也得通过编译程序的编译。但是Java编译程序并不直接将Java源代码编译为相依于计算机平台的0、1序列,而是将其编译为字节码。...所以JVM担任的职责之一就是当地翻译员,将字节码文件翻译为当时平台看得懂的0、1序列,有了JVM,你的Java程序就达到了“编译一次到处运行”的跨平台目的。所以到这里。...我们就知道了java程序跨平台性好的根本原因就是java虚拟机JVM存在的原因。 ? 分解过程: 第一步:Java源代码——.CLASS文件字节码,是java的第一次编译。...生成的这个.class文件就是可以到处运行的文件。 ? 第二步:Java字节码——到目标机器代码;执行是由JVM执行引擎来完成,JAVA的第二次编译。 ?...2、到处运行的隐含条件——这里的“到处”的前提是“装有JVM”。 看完编译过程在这里说“到处运行”就毫不费力了。因为第二次编译就是在JVM中执行的,也就是在任何一个装有“JVM”的操作系统中完成的。

    3.1K10

    第16次文章:Java字节码

    在上一期讲解java的动态性的时候,我们主要提到了java中的反射机制,可以在java代码运行的时候,改变类的结构,属性等信息,而这一节我们通过另一种实现方式来讲解java的动态性,主要就是java的字节码操作...其实,计算机并不是直接使用我们程序员编写好的源代码进行执行,而是在我们点击“run”按钮之后,计算机首先是对源代码(.java)文件进行编译操作,将我们写好的源代码.java文件编译成为字节码.class...所以说,我们的java虚拟机执行的是字节码文件。并且,不论该字节码文件来自于哪里,也不论字节码文件使用的是哪一种编辑器,只要其符合java虚拟机的要求,都可以被执行。...2、简介 (1)编译器将java源码编译成符合java虚拟机规范的字节码文件 (2)字节码内部不包含任何分隔符区分段落 (3)一组8位字节单位的字节流组成了一个完整的字节码文件 3、操作字节码的几个功能...4、常见的java字节码操作类库 (1)BCEL (Byte Code Engineering Library):属于java classworking广泛使用的一种框架,它可以让您深入JVM汇编语言进行类操作的细节

    60060

    第一次Java串讲

    Java基础的知识点结构 “目无全牛 游刃有余” 2阶段复习巩固 老九学堂学Java微视频到此已经录制三讲了,我们计划是每二周做一次知识点的串讲,目的是帮助大家巩固知识点,探讨一些学习方法。...并且把群里的学生提出有代表性的问题提出来集中做一个书面上的解答。前面老九君主要讲到了Java的发展史和如何编写第一个Java程序,还有Java的基础语法变量和一些常见的数据类型这些知识点。...认真阅读老九学堂的文章的九粉们,你们会发现老九君尽可能的在整理一部IT行业的历史,在这段不到50年的历史中,出现了很多新的科技和推动社会进步的人,他们是这个时代的英雄。...3 知识点回顾 温故而知新 知识点回顾: Java的起源? Java之父是? Sun公司是什么样的一个公司? Java的开发工具有哪些? Java的运行机制? Java是编译型语言还是解释型语言?...Java第一个程序的编码风格?程序结构是什么样的?入口方法main方法怎么写? Java的变量有什么用?如何定义的? Java常见的数据类型有哪些?

    74880

    一次Java内存泄漏调试的有趣经历

    很显然,一次 Zookeeper 失败会阻止索引操作的继续运行,不过它应该不会导致整个系统挂掉。而且,这种情况非常罕见(这是我第一次遇到 ZK 在生产环境挂掉),我觉得这个问题可能不太容易搞定。...没人知道当时发生了什么,服务表现的非常怪异。突然间,我想到了什么。Java 服务表现怪异的主要根源是什么?当然是垃圾回收。 为了应对目前这种情况的发生,我们一直打印着 GC 的日志。...这部分操作类似离线的批处理任务,而不是一个服务。 由于经常需要对数据做大量的更新,维护索引就不太值得,所以每执行一次定时任务,整个索引都会重建一次。...他是位很知名的 Java 性能专家,我碰巧在 Allegro 举办的 Devoxx 会议的训练课程里认识了他。...这应该会阻止老年代被填满从而产生一次 full GC。然而,在运行一段时间以后,我们再次惊讶的发现了一次 full GC。

    71630

    只出现一次的数字(java)

    二、题目描述: 题目:        给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。...[4,1,2,1,2] 输出: 4 题目来源:​​LeetCode官网​​ 题目难度:⭐ 三、思路分析:        这题相对其他简答题还要简答,所以题目难度我给了一星,分析题意可得要求找出只出现一次的那个数字...其中n 是数组长度,快排是logn,然还需对数组遍历一次。 空间复杂度:O(1)。 2、hash表法之leetcode提交运行结果截图如下: 复杂度分析: 时间复杂度:O(n)。...其中n 是数组长度,只需要对数组遍历一次。 空间复杂度:O(n)。 3、位运算法之leetcode提交运行结果截图如下: 复杂度分析: 时间复杂度:O(n)。...其中n 是数组长度,只需要对数组遍历一次。 空间复杂度:O(1)。

    25940

    一次 QPS 翻倍的 Java 服务性能优化

    导读:前段时间我们的服务遇到了性能瓶颈,由于前期需求太急没有注意这方面的优化,到了要还技术债的时候就非常痛苦了,本文记录Java性能优化过程,总结本篇文章希望对从事相关业务线的同学能够有所帮助或者启发...(HystrixTimer.java:106), 再向下就是我们的业务代码了。...由于服务在多个地方依赖同一个 RPC 返回值,平均一次接口响应会获取同样的值 3-5 次,所以接口内对这个 RPC 的返回值添加了 LocalCache。...排查代码发现 HystrixCommand 被添加在了 LocalCache 的 get 方法上,所以单机 QPS 1000 时,会通过 Hystrix 调用方法 3000-5000 次,进而产生大量的...) jstack 的一次输出中,可以看到多个线程的栈顶都停留在 Spring 的异常处理,但这时候也没有日志输出,业务也没有异常,跟进代码看了一下,Spring 竟然偷偷捕获了异常且不做任何处理。

    64820

    记录一次java应用突然挂掉的问题定位

    问题背景:一次启动本地应用,两分钟过后自动退出,通过日志并未发现任何异常状况,莫名其妙的应用就自动被杀掉了; 1、linux通过top查看java应用内存和cpu都不高,只是过一会突然就没了; 2、通过应用日志并未查到有任何异样...,代码也走查了好几遍; 3、通过dmesg | grep java查看内核日志信息,发现了问题所在,如下: [16949523.941194] java invoked oom-killer: gfp_mask..., file-rss:22020kB 以上信息可以看到内存溢出被linux杀掉的java应用信息; 4、但是我应用内存占用并不是特别高,通过jinfo -flags 发现java应用的启动预申请内存达到了...挑选的过程由 oom_badness() 决定,挑选的算法和想法都很简单很朴实:最 bad 的那个进程就是那个最占用内存的进程。  ...,不应该被轻易杀掉,所以打分的时候可以得到 3% 的优惠(adj -= 30; 分数越低越不容易被杀掉)。

    1.2K30

    Java 记一次因BOM编码标识的BUG

    有一个业务流程是读本地文件,根据某个符合分割,然后提取文件中的信息进行业务处理。 其中分割出的第一列为name,后续处理流程中有根据name找本次流程对应的下载文件。...流程A:读文件 分割 第一行作为name 根据name创建文件夹 下载相应文件 流程B:读文件 根据A生成的文件夹中的name找对应文件 对下载的文件进行处理 出现了一种奇怪的BUG,除了第一行处理失败...说明流程是没问题的 后来想起可能是因为创建A读取的文本时,用了win10的txt,默认utf-8 bom编码,这个编码会在文本开头处加上一个标识 导致我第一个name其实在A中是带标识的 B中没带标识所以找不到...这个标识打印也是打印不出来的。 解决办法: ? 加上这几行代码后,解决

    42110
    领券