package top100liked import ( "fmt" "testing" ) // https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/?envType=study-plan-v2&envId=top-100-liked func findMin(nums []int) int { if len(nums) == 1 { return nums[0] } if nums[0] < nums[len(nums)-1] { return nums[0] } start := 0 end := len(nums) - 1 for start <= end { mid := start + (end-start)/2 if mid >= 1 && nums[mid-1] > nums[mid] && mid < len(nums)-1 && nums[mid] < nums[mid+1] { return nums[mid] } if nums[mid] > nums[end] { // 最小值在右侧 start = mid + 1 } else { // 最小值在左侧 end = mid - 1 } } if nums[start] > nums[end] { return nums[end] } return nums[start] } func Test(t *testing.T) { // fmt.Println(findMin([]int{3, 4, 5, 1, 2})) // fmt.Println(findMin([]int{3, 1, 2})) fmt.Println(findMin([]int{2, 1})) }