面试题 10.03. 搜索旋转数组
搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-rotate-array-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int search(int[] arr, int target) {
int left = 0, right = arr.length - 1;
int ans = -1;
while (left <= right) {
int mid = (left + right) >> 1;
if (arr[left] == target) {
return left;
}
if (arr[mid] == target) {
ans = mid;
right = mid - 1;
} else {
if (arr[left] == arr[right] && arr[left] == arr[mid]) {
left++;
right--;
} else {
if (arr[left] <= arr[mid]) {
if (target >= arr[left] && target <= arr[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
} else {
if (target >= arr[mid] && target <= arr[right]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}
}
}
return ans;
}
}
心之所向,素履以往 生如逆旅,一苇以航

浙公网安备 33010602011771号