
思路
- 旋转过很多次,数组依然是由两个升序子数组构成的。
- 关键在于如何返回第一出现的index。
[5,5,5,1,2,3,4,5]
[1,2,3,4,5,5,5,5]
class Solution {
public int search(int[] arr, int target) {
int left = 0, right = arr.length - 1;
int index = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[left] == target) {
return left;
}
if (arr[mid] == target) {
index = mid;
right = mid - 1;
} else if (arr[mid] > arr[left]) {
if (target >= arr[left] && target < arr[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
} else if (arr[mid] < arr[left]) {
if (target <= arr[right] && target > arr[mid]) {
left = mid + 1;
} else {
right = mid - 1;
}
} else if (arr[mid] == arr[left]) {
left++;
}
}
return index;
}
}