154. 寻找旋转排序数组中的最小值 II-------------为啥用右边界而不用左边界

我花了挺长时间用左边界来做,最后发现总是有几个测试用例过不了,刚好评论里也有关于这个点困惑,我就从理论上思考了这个问题。

当然,这里可以引申成寻找最大值,那么思考一下分别用左右边界做判断的写法。

这里用左边界更好,但是右边界也可以做(仅限无重复数字)。

右边界的话可以考虑依然使用原来的方法,只需要最后返回nums[(left-1+nums.length)%nums.length] ,因为有可能最小值是第一个。-----其实提一下,这个用到了求出来的最小值的特性,该最小值是最左边的最小值,所以最小值的左边或者数组最后一个元素必然是最大值------------差点误导了大家。。这个最小值确实是最左边的最小值,但是左边不一定是数组最大元素

如:1,1,1,1,2,1,1.这也是一个合法的旋转数组。。

所以还是老老实实用镜像方法求最大值吧。注意求最大值用右中位数,而不是左中位数。。。一切和求最小值反过来就行。

做做81题你就懂了。

关键特性:最大值可以将数组分为2个有序数组,但是最小值的位置不可以。。所以这题要用到求最大值的方法,而不能用最小值。。。。。。面向测试编程啊,太难了

 

在不重复的数组里,最大值和最小值是相邻的,但是由于重复,而求出来的最大值是最右边的,而最小值是最左边的。就可能不相邻了hhhh

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值