旋转数组后的最小值

旋转数组后的最小值

    旋转之后的数组其实给以划分为两部分有序数组,最小的值其实就是两个有序数组的分界线,用二分查找解决此题(仅仅限于数组没有相同元素,如果有相同元素只能通过比那里数组)

思路:

1)定义两个指针lowhigh,一个指向数组的第一个元素,另一个指向数组的最后一个元素,由于该数组是有序数组旋转得到,所有第一个元素必然大于最后一个元素

2)找到数组中间元素

若中间元素大于第一个元素,则中间元素位于前面的递增子数组,则此时最小元素位于后半段数组,将low移至mid

若中间元素小于第一个元素,则中间元素位于后面递增数组,则最小元素位于中间元素的前面,我们让high移至mid

依次缩短范围

3)按照上面的思路,第一个指针low总是指向前面递增的数组,第二个指针指向后面递增数组元素

最终第一个指针将指向前面数组的最后一个元素,第二个指针指向后面数组中的第一个元素。也就是说他们将指向两个相邻的元素,而第二个指针指向的刚好是最小的元素,这就是循环的结束条件。

猜你喜欢

转载自blog.csdn.net/sinat_36722750/article/details/82319160
今日推荐