从有序数组中获取目标值的下标
public class GetTarget {
public static void main(String[] args) {
int[] num = new int[]{4, 5, 6, 7, 8, 1, 2, 3};
System.out.println(getTargetIndex(num, 8));
}
private static int getTargetIndex(int[] num, int target) {
if (num == null || num.length == 0) {
return -1;
}
int start = 0;
int end = num.length - 1;
if (num[start] < num[end]) {
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (num[mid] < target) {
start = mid;
} else if (num[mid] == target) {
return mid;
} else {
end = mid;
}
}
if (num[start] == target) {
return start;
}
if (num[end] == target) {
return end;
}
return -1;
} else {
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (num[mid] == target) {
return mid;
}
if (num[mid] > num[start]) {
if (target > num[start] && target < num[mid]) {
end = mid;
} else {
start = mid;
}
} else {
if (target > num[mid] && target < num[end]) {
start = mid;
} else {
end = mid;
}
}
}
if (num[start] == target) {
return start;
}
if (num[end] == target) {
return end;
}
return -1;
}
}
}