技术标签: 算法分析与设计
题目参考:https://leetcode-cn.com/problems/guess-number-higher-or-lower/description/
我们正在玩一个猜数字游戏。 游戏规则如下:
我从 1 到 n 选择一个数字。 你需要猜我选择了哪个数字。
每次你猜错了,我会告诉你这个数字是大了还是小了。
你调用一个预先定义好的接口 guess(int num)
,它会返回 3 个可能的结果(-1
,1
或 0
):
-1 : 我的数字比较小 1 : 我的数字比较大 0 : 恭喜!你猜对了!
示例 :
输入: n = 10, pick = 6 输出: 6
------------------------------------------------------------------------------------------------------------------------------------------------------------
首先是一个二分查找,如果使用下面的算法,会编译通过:
public class Solution extends GuessGame {
public int guessNumber(int n) {
int left = 1;
int right = n;
int mid = 0;
while(left<=right){
mid = left + (right-left)/2;
if(guess(mid)==0) return mid;
else if(guess(mid)==1) left = mid+1;
else if(guess(mid)==-1) right = mid-1;
}
return mid;
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------
但是如果使用下面的代码,会超时:
/* The guess API is defined in the parent class GuessGame.
@param num, your guess
@return -1 if my number is lower, 1 if my number is higher, otherwise return 0
int guess(int num); */
//解释下:guess接口可以直接使用,num是你要猜的数字,这个函数就是告诉你,你猜的和真实的比较结果
public class Solution extends GuessGame {
public int guessNumber(int n) {
int left = 1;
int right = n;
int mid = 0;
while(left<=right){
mid = (right+left)/2;
if(guess(mid)==0) return mid;
else if(guess(mid)==1) left = mid+1;
else if(guess(mid)==-1) right = mid-1;
}
return mid;
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------
问题就是出在 mid = left + (right-left)/2;这里,但是我还是不明白为什么使用mid = (left + right)/2;不可以。
会超时。因为这两句的运算结果是一样的。而且影响效率的为什么不是递归调用guess函数那里?
有知道原因的朋友请告知,谢谢!
------------------------------------------------------------------------------------------------------------------------------------------------------------
参考:https://blog.csdn.net/baidu_39622935/article/details/81507466
文章浏览阅读1.1w次。在11.5版本里,注册表的函数变化不多我在这里要记录的是打包的时候注册表的问题,注册表分项和键,打开注册表(开始->运行,输入regedit,确定),可以在左边的树形里看见很多文件夹的图标,这些是项,点击一个项,可以在右边看见他的键值,每个项都有一个“默认”,有的项还有很多键值在打包的时候,我们有时候要记录很多东西,嗯,我们要记录安装文件的类型(服务器端程序还是客户端程序),我们要记录软件_注册表new - > key
文章浏览阅读490次。1. 前言全志平台默认的SDK系统启动+相机出图的时间较长,普遍是十几秒,使用体验较差; 这里尝试通过一些方法优化整体启动时间2.统计内核耗时模块打开这个宏initial_debug,每个驱动的初始化起始时间和结束时间都打印出来了。有了这个时间,基本就可以确定哪些部分需要优化了。 我的做法是只关注耗时10000us以上的驱动。根据上面统计,可根据使用场景的需求, 尝试可以关闭相应不需要的模块3. 降低打印等级开发过程中往往会把系统的打印等级设置为最高,而实际上发布出的固件_initial_debug
文章浏览阅读1.5k次。兴趣是最好的老师,HelloGitHub 让你对编程感兴趣!简介分享 GitHub 上有趣、入门级的开源项目。https://github.com/521xueweihan/HelloGi..._开源 lexer
文章浏览阅读5.7k次。Code Review 即日常所说的代码评审或代码回顾,主要是在软件开发的过程中,对功能源代码进行评审,其目的是找出并修正软件开发过程中出现的错误的过程,提高和改进代码质量的过程。_code review怎么做
文章浏览阅读2.1k次。SSM项目的启动过程:ssm框架中,项目启动过程以及web.xml配置详解_菜鸟不会飞-程序员宅基地_ssm项目启动入口是什么本篇主要在基于SSM的框架,深入讲解web.xml的配置web.xml 每个javaEE项目中都会有,web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。 web.xml配置文件内容如下:<!DOCTYPE web-app PUBLIC..._ssm框架 启动传参
文章浏览阅读1.6k次。登陆后不用重启!npm config set proxy http://工号:密码@代理服务器地址:80npm config set https-proxy http://工号:密码@代理服务器地址:80_npm config set disturl 失败
文章浏览阅读1.8k次,点赞2次,收藏2次。1、概念_mongodb特点
文章浏览阅读3k次。oozie执行hiveql,发生这样的异常!Main class [org.apache.oozie.action.hadoop.HiveMain], exit code [10]_attempt recovered after rm restartmain class [org.apache.oozie.action.hadoop
文章浏览阅读255次。选题背景:随着互联网的快速发展,各行各业都在积极探索数字化转型的道路。教育领域也不例外,传统的排课方式已经无法满足现代学生和教师的需求。为了提高教学效率、优化资源利用以及提供更好的学习体验,许多学校和机构开始引入网上排课系统。这种系统通过在线平台实现课程的安排和管理,为学生和教师提供了更加便捷和灵活的排课方式。选题意义:网上排课系统的出现对于教育领域具有重要的意义。首先,它能够提高教学效率。传统的排课方式需要大量的人力和时间,而网上排课系统可以自动化地完成排课过程,减少了繁琐的手工操作,提高了排课的_排课系统数据库设计
文章浏览阅读7.9k次,点赞3次,收藏13次。流必须要关闭的原因java相对C,C++来说不需要手动释放内存,在对象引用被消除之后,正常情况下内存资源是会被垃圾回收,那么在使用完IO流之后为什么需要手动关闭. 这是为了回收系统资源,比如释放占用的端口,文件句柄,网络操作数据库应用等.对Unix系统来说,所有的资源都可以抽象成文件,所以可以通过lsof来观察。看下面这个例子,我们创建许多的IO流但是不关闭public clas..._c++ 流不关闭
文章浏览阅读2.5w次,点赞2次,收藏4次。最近遇到如题所示弹框的问题,花了很长时间才解决,解决方法却很简单。故记录下来。解决方法:找到相同系统却没有该问题的情况(比如出问题的是64位的win7系统,那就找一个没有该问题的64位的win7系统)。将正常系统的api-ms-win-downlevel-shlwapi-l1-1-0.dll文件复制到出现该问题的电脑的相应位置。就可以解决了。但是同样有一些问题需要注意详细步骤:有一些dl..._api-ms-win-downlevel-shlwapi-l1-1-0.dll
文章浏览阅读325次。ResponseEntity:code:/*常用*/@GetMapping("/hello")public ResponseEntity<String> hello(){ return new ResponseEntity<>("hello word!",HttpStatus.OK);}/*设置HTTP头*/@GetMapping("/hello")pu..._responseentity json