//升序排列的整数数组 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
//
// Related Topics 数组 二分查找
// 👍 1113 👎 0
// 首先数组升序,旋转之后也是相对升序,所以如果mid > tatrget 那么 target一定在mid的左侧 r = mid,如果min < target,正常二分查找应该是 target在mid右侧 l = mid,当且仅当 target > r (也就是target比最右侧的数字还大)的时候在左侧,所有有一段特殊判断;
class Solution {
public int search(int[] nums, int target) {
int l = 0;
int r = nums.length - 1;
while (l<r) {
int mid = (l + r) / 2;
if (nums[mid] == target) return mid;
if (nums[mid]>target){
r = mid;
}
if (nums[mid]<target){
if (nums[mid]<nums[l] && target>nums[r]){
r = mid;
}else {
l = mid;
}
}
}
return -1;
}
}
//leetcode submit region end(Prohibit modification and deletion)
2020-12-25 搜索旋转排序数组
最新推荐文章于 2022-02-10 13:10:20 发布