Skip to content

Latest commit

 

History

History
39 lines (22 loc) · 1.17 KB

README.md

File metadata and controls

39 lines (22 loc) · 1.17 KB

问题描述

https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

请找出其中最小的元素。你可以假设数组中不存在重复元素。

输入: [3,4,5,1,2]
输出: 1

输入: [4,5,6,7,0,1,2]
输出: 0

思路

  • 二分法

  • 假设 var arr = [a, b, c, d, e, f, g, h, i, j ,k] 为初始数组,则必有 k > a,当数组在元素 e 发生旋转,旋转为 var reversedArr = [e, f, g, h, i, j ,k, a, b, c, d] 则必有 d < e

  • 若数组 arr[arr.length - 1] > arr[0] 则数组未旋转过

  • arr[arr.length - 1] < arr[0] 则发生过旋转

  • 对于旋转过的数组,利用二分法进行大小比较,设初始最小元素为 arr[0],设数组中位数为 arr[mid]

  • arr[0] > arr[mid] 则说明 mid 位置的元素应该在 arr[0] 元素之前,那么在左半区继续查找,并同时设置 min = arr[mid]

  • 右半区类似查找

Key Points

  • 旋转之后 [0] 索引的位置一定是旋转点,利用旋转点进行查找

官方解答