题解 | #在旋转过的有序数组中寻找目标值#
在旋转过的有序数组中寻找目标值
http://www.nowcoder.com/practice/87c0e7abcbda41e7963660fa7d020995
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param target int整型
* @return int整型
*/
public int search (int[] nums, int target) {
// write code here
return dealNums(nums, 0, nums.length - 1, target);
}
private int dealNums(int[] nums, int left, int right, int target) {
int result = -1;
if(left > right) {
return result;
}
int mid = (left + right)/2;
if(nums[mid] < nums[left]) {
result = dealNums(nums, left, mid - 1, target);
if(result != -1) {
return result;
}
result = binarySearch(nums, mid, right, target);
if(result != -1) {
return result;
}
} else if(nums[mid] > nums[right]) {
result = binarySearch(nums, left, mid, target);
if(result != -1) {
return result;
}
result = dealNums(nums, mid + 1, right, target);
if(result != -1) {
return result;
}
} else {
result = binarySearch(nums, left, right, target);
if(result != -1) {
return result;
}
}
return result;
}
private int binarySearch(int[] nums, int left, int right, int target) {
while(left <= right) {
int mid = (left + right)/2;
int temp = nums[mid];
if(temp == target) {
return mid;
} else if(target < temp) {
right = mid - 1;
} else if(target > temp) {
left = mid + 1;
}
}
return -1;
}
} 思路为:不断将整个数组切分为确定有序,和不确定有序两部分。并在有序部分使用二分查找。
美的集团公司福利 878人发布