写upper的时候为什么这个while里面没有返回值呢?

写upper的时候为什么这个while里面没有返回值呢?

http://img1.sycdn.imooc.com//climg/607bf4f509f36c1013180872.jpg

问题描述:

老师 这个while里面没有返回值 就能保证 最后的return l 就是求解的索引吗?while循环完毕 最后的l不是等于r=nums.length吗?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

while 里不返回,因为在 while 外返回。


是的,可以保证最后 l 一定是解,这是因为对于 upper 来说,解一定在最初设定的 [l, r] 的范围里,即 [0, nums.length] 的范围里。(如果数组中所有元素都 <= target,则返回 nums.length,表示大于 target 的元素在最右边的元素还要右边。)


所以,一旦 l == r 了,说明搜索空间中只剩下一个元素了,这个元素就一定是解。最后返回 l 也可以,返回 r 也可以。反正退出 while 循环的时候,l == r。


while 以后,l 不一定是 nums.length(但一定是 r)。课程中的代码给出了小数据规模的测试用例,你可以先运行一下,看看最终的输出结果是不是都是 nums.length?如果不是,你可以单步跟踪一下,看一下这个算法为什么最终 l 不一定是 nums.length。你又为什么认为最终 l 一定都是 nums.length。你那里想错了?这是学习算法的重要方式。进步就在这个过程中哦。


继续加油!:)

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2627    人
  • 解答问题       1105    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师