我花了挺长时间用左边界来做,最后发现总是有几个测试用例过不了,刚好评论里也有关于这个点困惑,我就从理论上思考了这个问题。
当然,这里可以引申成寻找最大值,那么思考一下分别用左右边界做判断的写法。
这里用左边界更好,但是右边界也可以做(仅限无重复数字)。
右边界的话可以考虑依然使用原来的方法,只需要最后返回nums[(left-1+nums.length)%nums.length] ,因为有可能最小值是第一个。-----其实提一下,这个用到了求出来的最小值的特性,该最小值是最左边的最小值,所以最小值的左边或者数组最后一个元素必然是最大值------------差点误导了大家。。这个最小值确实是最左边的最小值,但是左边不一定是数组最大元素
如:1,1,1,1,2,1,1.这也是一个合法的旋转数组。。
所以还是老老实实用镜像方法求最大值吧。注意求最大值用右中位数,而不是左中位数。。。一切和求最小值反过来就行。
做做81题你就懂了。
关键特性:最大值可以将数组分为2个有序数组,但是最小值的位置不可以。。所以这题要用到求最大值的方法,而不能用最小值。。。。。。面向测试编程啊,太难了
在不重复的数组里,最大值和最小值是相邻的,但是由于重复,而求出来的最大值是最右边的,而最小值是最左边的。就可能不相邻了hhhh