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 ArrayList<Integer> searchRange(ArrayList<Integer> A, int target) {
// 2015-4-6 O(log n)
ArrayList<Integer> notFind = new ArrayList<>();
notFind.add(-1);
notFind.add(-1);
if (A == null || A.size() == 0) {
return notFind;
}
ArrayList<Integer> rst = new ArrayList<>();
int start = 0;
int end = A.size() - 1;
while (start + 1 < end) {
int mid = (start + end) / 2;
if (A.get(mid) >= target) {
end = mid;
} else {
start = mid;
}
} // while
if (A.get(start) == target) {
rst.add(start);
} else if (A.get(end) == target) {
rst.add(end);
} else {
return notFind;
}
start = 0;
end = A.size() - 1;
while (start + 1 < end) {
int mid = (start + end) / 2;
if (A.get(mid) > target) {
end = mid;
} else {
start = mid;
}
} // while
if (A.get(end) == target) {
rst.add(end);
} else if (A.get(start) == target) {
rst.add(start);
} else {
return notFind;
}
return rst;
}
}
python
class Solution:
"""
@param A : a list of integers
@param target : an integer to be searched
@return : a list of length 2, [index1, index2]
"""
def searchRange(self, A, target):
# write your code here
if len(A) == 0:
return [-1, -1]
start = 0
end = len(A) - 1
while start + 1 < end:
mid = (start + end) / 2
if A[mid] >= target:
end = mid
else:
start = mid
if A[start] == target:
first = start
elif A[end] == target:
first = end
else:
return [-1, -1]
start = 0
end = len(A) - 1
while start + 1 < end:
mid = (start + end) / 2
if A[mid] > target:
end = mid
else:
start = mid
if A[end] == target:
last = end
elif A[start] == target:
last = start
else:
return [-1, -1]
return [first, last]