一、寻找一个无重复数的下标
题目
解答
class Solution {
public int search(int[] nums, int target) {
int l = 0, n = nums.length, r = n-1, mid;
while (l <= r) {
mid = l + (r-l)/2;
if (nums[mid] == target) return mid;
else if (nums[mid] < target) l = mid+1;
else r = mid-1;
}
return -1;
}
}
二、寻找有重复数的左边界
题目
leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
解决
class Solution {
public int[] searchRange(int[] nums, int target) {
int l = 0, r = nums.length - 1, b1 = -1, b2 = -1;
// 寻找左边界
while (l <= r) {
int mid = l + (r - l) / 2;
if (nums[mid] < target)
l = mid + 1;
else if (nums[mid] > target)
r = mid - 1;
else if (nums[mid] == target)
r = mid - 1;
}
if (l >= 0 && l < nums.length && nums[l] == target)
b1 = l;
l = 0;
r = nums.length - 1;
// 寻找右边界
while (l <= r) {
int mid = l + (r - l) / 2;
if (nums[mid] < target)
l = mid + 1;
else if (nums[mid] > target)
r = mid - 1;
else if (nums[mid] == target)
l = mid + 1;
}
if (r >= 0 && r < nums.length && nums[r] == target)
b2 = r;
return new int[] { b1, b2 };
}
}