- 题目描述:
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
- 示例:
(1)
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
(2)
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
- 解法一:常规解法,遍历循环数组。
#Python
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
l = []
if target not in nums:
l = [-1, -1]
for i in range(len(nums)):
if target==nums[i]:
l.append(i)
if target > nums[i]:
break
if len(l) == 1:
l = [l[0], l[0]]
else:
l = [l[0], l[-1]]
return l
//Java
/* 第一次循环从左向右找寻开始位置, 第二次循环从右向左寻找结束位置。 */
class Solution {
public int[] searchRange(int[] nums, int target) {
int targetRange[] = {-1, -1};
for (int i = 0; i < nums.length; i++) {
if(target == nums[i]){
targetRange[0] = i;
break;
}
}
if(targetRange[0] == -1){
return targetRange;
}
for (int i = nums.length-1; i >= 0; i--) {
if(target == nums[i]){
targetRange[1] = i;
break;
}
}
return targetRange;
}
}
- 解法二: 二分查找