class Solution
{
int tfind(int[] a, int l, int r, int x)
{
while (l < r)
{
int mid = (l + r) / 2;
if (a[l] <= a[mid])//左边有序
{
if (x >= a[l] && x <= a[mid]) r = mid;//是否在有序范围
else l = mid + 1;
} else//右边有序
{
if (x >= a[mid + 1] && x <= a[r]) l = mid + 1;//是否在有序范围
else r = mid;
}
}
if (a[l] == x) return l;
return -1;
}
public int search(int[] nums, int target)
{
return tfind(nums, 0, nums.length - 1, target);
}
}
class Solution
{
int tfind(int[] a, int l, int r, int x)
{
int preMid = -1;
while (l < r)
{
int mid = (l + r + 1) / 2;
if (preMid == mid)
{
if (a[l] == x) return l;
if (a[r] == x) return r;
break;
}
preMid = mid;
if (a[l] <= a[mid])
{
if (x >= a[l] && x <= a[mid]) r = mid;
else l = mid + 1;
} else
{
if (x >= a[mid] && x <= a[r]) l = mid;
else r = mid - 1;
}
}
return l < a.length && a[l] == x ? l : -1;
}
public int search(int[] nums, int target)
{
return tfind(nums, 0, nums.length - 1, target);
}
}
class Solution
{
int tfind(int[] a, int l, int r, int x)
{
while (l < r)
{
int mid = (l + r + 1) >> 1;
if (a[mid] == x) return mid;
if (a[mid] < x)
{
if (a[l] < a[r]) l = mid + 1;
else
{
if (a[mid] > a[l]) l = mid + 1;//mid在大段
else//mid在小段
{
if (a[r] < x) r = mid - 1;
else l = mid + 1;
}
}
} else if (a[mid] > x)
{
if (a[mid] < a[r]) r = mid - 1;//mid在小段
else //mid在大段
{
if (a[l] > x) l = mid + 1;
else r = mid - 1;
}
}
}
return l < a.length&&a[l] == x ? l : -1;
}
public int search(int[] nums, int target)
{
return tfind(nums, 0, nums.length - 1, target);
}
}