LeetCode 刷题(1/30)
求取在数组中某一个值出现的第一个和最后一个位置
思路:当数组是有序得时候,使用二分查找的方法,分别找到左右边界。当无序得时候使用暴力搜索。
\\当lower==true的时候表示求得左边界
\\nums为不递减得数组
public int binarySearch(int[] nums, int target, boolean lower) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] > target) {
right = mid - 1;\\当中间得值大于目标,证明目标值在左边,收缩右边界
} else if(nums[mid] < target)
{
left = mid + 1;\\当中间得值小于目标,证明目标值在右边,收缩左边界
}else{
if (lower){
right=mid-1; \\继续搜索。如果mid-1之后所有值都不是target
\\(都小于target),显然left会一直移动到right+1即为左边界
} else{
left =mid + 1;
}
}
}
return lower?left:right;
}
\\运行完后判断返回值returnVal if(returnVal <0||returnVal >=nums.length||nums[returnVal ]!=target)
\\证明没有找到