面试题:10.03.搜索旋转数组
题目:原题目
搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。
题目难度:中等
方法一:暴力法
步骤
- 和前面的几道题仍然是一个套路
- 查找,暴力比较
- 发现使用二分法反倒不行,这是求找到的第一个索引,所以还是暴力吧,再思考一下;
- 二分法还是可以的
方法二,二分法:
- 二分法
- 但是超出限制了
- 还是暴力香啊
int search(int* arr, int arrSize, int target){
int l = 0,r = arrSize-1;
while(r>l)
{
int mid = l + (r-l)/2;
if(arr[mid]>arr[l])
{
if(arr[l]<=target && target<=arr[mid])
{
r = mid;
}
}
else if(arr[l]>arr[mid])
{
if(arr[mid]<target && target<=arr[r])
{
l = mid +1;
}
}else if(arr[l]==arr[mid])
{
if(arr[l]!=target)
{
l++;
}
else
{
return l;
}
}
}
return -1;
}