搜索旋转排序数组
1、题目描述
33. 搜索旋转排序数组
2、思路:
数组经过旋转后,还是部分有序,还是用二分法,找到数组的mid,然后看到底是前半段有序,还是后半段有序,因为只要这半段是有序的,就可以用target去比较这半段的起点和这半段的终点,来判断target是否是在这半段中。就可以知道到底该往哪个方向缩小范围进行查找,也就是mid接下来该从哪半段去取。
3、代码:
class Solution { public int search(int[] nums, int target) { if (nums == null || nums.length == 0) { return -1; } if (nums.length == 1 && nums[0] == target) { return 0; } int l = 0; int r = nums.length - 1; while (l <= r) { int mid = (l + r) / 2; if (nums[mid] == target) { return mid; } if (nums[l] <= nums[mid]) { if (nums[l] <= target && target < nums[mid]) { r = mid - 1; } else { l = mid + 1; } } else { if (nums[mid] < target && target <= nums[r]) { l = mid + 1; } else { r = mid - 1; } } } return -1; } }
。。