搜索旋转排序数组
解题思路:
这道题主要就是考察二分法。
代码:
public static int Search(int[] nums, int target)
{
if (nums.Length == 0 || nums == null)
return -1;
if (nums.Length == 1)
return target == nums[0] ? 0 : -1;
int i = 0;
int j = nums.Length - 1;//双指针二分法。由于只旋转了一点,所以每次总能是一半有序或者都有序。
while(i<=j)
{
int mid = (i + j) / 2;
if (nums[i] == target)
return i;
if (nums[j] == target)
return j;//和传统的二分法不同,因为有一半是无序的,所以为了快加了个比较边界值。
if (nums[mid] == target)
return mid;
if(nums[i]<nums[mid])
{
if (target > nums[i] && target < nums[mid])
j = mid - 1;
else
i = mid + 1;
}//此时说明是左边有序。
else
{
if (target > nums[mid] && target < nums[j])
i = mid + 1;
else
j = mid - 1;
}//此时是右边有序。
}//二分法查找。
return -1;
}