搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。
class Solution {
public int search(int[] arr, int target) {
if(arr[0] == target ){
return 0;
}
int n = arr.length;
int left = 0;
int right = n - 1;
while(left <= right){
int mid = left + (right - left) / 2;
if(arr[mid] == target){
//right = mid - 1;
while(mid - 1 >= 0 && arr[mid - 1] == arr[mid]){
mid--;
}
return mid;
//右边递增
}else if(arr[mid] < arr[right]){
//值在右边
if(arr[mid] < target && target <= arr[right]){
left = mid + 1;
}else{
right = mid - 1;
}
//左边递增
}else if(arr[mid] > arr[right]){
//值在左边
if(arr[left] <= target && target < arr[mid]){
right = mid - 1;
}else{
left = mid + 1;
}
//arr[mid] == arr[right]
}else{
//right = mid - 1;
right--;
}
}
//right < left 都没找到
return -1;
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:42.1 MB, 在所有 Java 提交中击败了78.23%的用户
通过测试用例:32 / 32