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

问题描述:
老师 这个while里面没有返回值 就能保证 最后的return l 就是求解的索引吗?while循环完毕 最后的l不是等于r=nums.length吗?
15
收起
正在回答
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 星