一、題目描述
升序排列的整數數組 nums 在預先未知的某個點上進行了旋轉(例如, [0,1,2,4,5,6,7] 經旋轉後可能變爲 [4,5,6,7,0,1,2] )。
請你在數組中搜索 target ,如果數組中存在這個目標值,則返回它的索引,否則返回 -1 。
示例 1:
輸入:nums = [4,5,6,7,0,1,2], target = 0
輸出:4
示例 2:
輸入:nums = [4,5,6,7,0,1,2], target = 3
輸出:-1
示例 3:
輸入:nums = [1], target = 0
輸出:-1
提示:
1 <= nums.length <= 5000
-10^4 <= nums[i] <= 10^4
nums 中的每個值都 獨一無二
nums 肯定會在某個點上旋轉
-10^4 <= target <= 10^4
二、解題思路
使用二分查找,初始化兩個變量low=0,hight=nums.length-1,mid=(low+high)/2
1、假如nums[mid]等於target,返回下標mid
2、當nums[mid]小於nums[high]時,說明mid->high右側是有序的,判斷target是否在右側,否則往左側尋找
3、當nums[mid]大於nums[high]時,說明low->mid左側是有序的