Search for a Range
程序员文章站
2022-05-05 17:38:20
...
Given a sorted array of n integers, find the starting and ending position of a given target value.
If the target is not found in the array, return [-1, -1]
.
Example
Example 1:
Input:
[]
9
Output:
[-1,-1]
Example 2:
Input:
[5, 7, 7, 8, 8, 10]
8
Output:
[3, 4]
Challenge
O(log n) time.
思路:标准的九章二分模板;
public class Solution {
/**
* @param A: an integer sorted array
* @param target: an integer to be inserted
* @return: a list of length 2, [index1, index2]
*/
public int[] searchRange(int[] A, int target) {
int[] res = {-1,-1};
if(A == null || A.length == 0) {
return res;
}
res[0] = findFirstIndex(A, target);
res[1] = findLastIndex(A, target);
return res;
}
private int findFirstIndex(int[] A, int target) {
if(A == null || A.length == 0) {
return -1;
}
int start = 0; int end = A.length -1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(A[mid] >= target) {
end = mid;
} else {
start = mid;
}
}
if(A[start] == target){
return start;
}
if(A[end] == target) {
return end;
}
return -1;
}
private int findLastIndex(int[] A, int target) {
if(A == null || A.length == 0) {
return -1;
}
int start = 0; int end = A.length -1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if(A[mid] > target) {
end = mid;
} else {
// A[mid] <= target;
start = mid;
}
}
if(A[end] == target) {
return end;
}
if(A[start] == target){
return start;
}
return -1;
}
}
上一篇: 关于二分法的一些误区
下一篇: drop eggs
推荐阅读
-
Python之range()函数使用
-
SharePoint 2007图文开发教程(6) 实现Search Services
-
ThinkPHP模板范围判断输出In标签与Range标签用法详解
-
XP系统删除Windows Search和searchindexer.exe文件的方法
-
C# 8.0中的范围类型(Range Type)示例详解
-
NodeJS使用Range请求实现下载功能的方法示例
-
python开发中range()函数用法实例分析
-
python进阶教程之循环相关函数range、enumerate、zip
-
python中for用来遍历range函数的方法
-
亚马逊Search Terms关键词优化技巧