详情链接:LeetCode 33.搜索旋转排序数组
1.问题思路
升序数组按照某个位置进行了旋转拆分成了两个升序数组。通过二分法不断找到中间位置的数,然后升序的区间快速切掉多余的部分。
2.代码实现
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while(left <= right) {
int mid = left + (right - left) / 2;
System.out.println("left: " + left + ", right: " + right + ", mid:" + mid);
if (nums[mid] == target) {
return mid;
}
// 找到有序区间,实现快速切割
// left - mid 有序
if (nums[left] <= nums[mid]) {
if (target >= nums[left] && target < nums[mid]) {
right = mid -1;
} else {
left = mid + 1;
}
} else {
// mid - right有序
if ( target <= nums[right] && target > nums[mid]) {
left = mid + 1;
} else {
right = mid -1;
}
}
}
return -1;
}
}
829

被折叠的 条评论
为什么被折叠?



