//分两部 先找最小 再找最大
class Solution {
public int[] searchRange(int[] nums, int target) {
if(nums == null || nums.length == 0) return new int[]{-1, -1};
int[] n = new int[] {-1, -1};
int s = 0;
int e = nums.length - 1;
int l = 0;
int r = nums.length - 1;
//找最小
while(s <= e) {
int m = s + (e - s) / 2;
if(target == nums[m]) { //如果找到== target 就把当前位置储存下来 继续做 binary seach
n[0] = m;
e = m - 1;
} else if(target < nums[m]) {
e = m - 1;
} else {
s = m + 1;
}
}
//找最大
while(l <= r) {
int m = l + (r - l) / 2;
if(target > nums[m]) {
l = m + 1;
} else if(target < nums[m]) {
r = m - 1;
} else { //如果找到== target 就把当前位置储存下来 继续做 binary seach
n[1] = m;
l = m + 1;
}
}
return n;
}
}
Find First and Last Position of Element in Sorted Array
最新推荐文章于 2022-05-11 10:35:34 发布
本文介绍了一种使用两次二分查找来确定有序数组中特定目标值首次与末次出现位置的算法实现。通过分别查找最小和最大位置,该方法有效地解决了寻找目标值范围的问题。
211

被折叠的 条评论
为什么被折叠?



