int binsearch(int* nums, int numsSize, int target)
{
int low = 0, high = numsSize - 1;
while (low <= high)
{
int mid = low + (high - low) / 2;
if (nums[mid] > target)
{
high = mid - 1;
}
else if (nums[mid] < target)
{
low = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int search(int* nums, int numsSize, int target)
{
if (numsSize == 1)
{
if (nums[0] == target)
{
return 0;
}
else
{
return -1;
}
}
int i, j, n;
int* a = malloc(numsSize * sizeof(int));
for (i = 1; i < numsSize; i++)
{
if (nums[i] < nums[i - 1])
{
break;
}
}
if (i == numsSize)
{
return binsearch(nums, numsSize, target);
}
for (n = i, j = 0; n < numsSize; j++, n++)
{
a[j] = nums[n];
}
for (int n = 0; n < i; n++, j++)
{
a[j] = nums[n];
}
int m = binsearch(a, numsSize, target);
if (m == -1)
{
return -1;
}
if (m < numsSize - i)
{
return m + i;
}
else
{
return m - (numsSize - i);
}
}
33. 搜索旋转排序数组
最新推荐文章于 2024-08-03 20:10:04 发布