目录
一、题目
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
进阶:
- 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?
二、示例
示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:
扫描二维码关注公众号,回复: 12472083 查看本文章输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
示例 3:
输入:nums = [], target = 0
输出:[-1,-1]
提示:
- 0 <= nums.length <= 105
- -109 <= nums[i] <= 109
- nums 是一个非递减数组
- -109 <= target <= 109
三、思路
一个for循环,当第一次遍历到 nums[i] == target 时,st = i,之后,每次遍历到nums[i] == target时,ed = i。
若nums数组中只有一个nums[i] == target,即st != -1,但ed == -1,此时令ed == st。
四、代码
class Solution:
def searchRange(self, nums, target):
"""
:param nums: List[int]
:param target: int
:return: List[int]
"""
st, ed = -1, -1
for i in range(len(nums)):
if nums[i] == target:
if st == -1: st = i
else:ed = i
if st != -1 and ed == -1:ed = st
return [st, ed]
if __name__ == '__main__':
nums = [5, 7, 7, 8, 8, 10]
target = 8
s = Solution()
ans = s.searchRange(nums, target)
print(ans)