模版一.此模版可以找到第一个target出现的位置
public int binarySearch(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return -1;
}
int start = 0, end = nums.length - 1;
while (start + 1 < end) { //条件为start + 1 < end
int mid = start + (end - start) / 2;
if (nums[mid] == target) {
end = mid;
} else if (nums[mid] < target) {
start = mid;
// or start = mid + 1
} else {
end = mid;
// or end = mid - 1
}
}
//看start是否和target相等,再看end是否和target相等
if (nums[start] == target) {
return start;
}
if (nums[end] == target) {
return end;
}
return -1;
}
模版二.此模版可以找到最后一次出现target的位置(两个地方改动了)
public int binarySearch(int[] nums, int target) {
if (nums == null || nums.length == 0) {
return -1;
}
int start = 0, end = nums.length - 1;
while (start + 1 < end) { //条件为start + 1 < end
int mid = start + (end - start) / 2;
if (nums[mid] == target) {
start = mid; **//如果相等则往右查找**
} else if (nums[mid] < target) {
start = mid;
// or start = mid + 1
} else {
end = mid;
// or end = mid - 1
}
}
//看end是否和target相等,再看start是否和target相等
if (nums[end] == target) {
return endt;
}
if (nums[start] == target) {
return start;
}
return -1;
}