)
文章目录
☀️ 前言 ☀️
算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!
🙀 作者简介 🙀
大家好,我是国王与乞丐,一个尽力让无情的代码变得生动有趣的IT小白,很高兴能偶认识你,关注我,每天坚持学点东西,我们以后就是大佬啦!
💗 一、题目描述 💗
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
示例1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
示例3:
输入:nums = [], target = 0
输出:[-1,-1]
💁 二、题目解析 💁
使用一个字典,用来保存列表中每个数字及其对应的下标,
然后和给定的数字对比,存在则输出
🏃 三、代码 🏃
☁️ 1️⃣. python ☁️❄️
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
if not nums:
return [-1,-1]
index = {
}
for id,value in enumerate(nums):
index.setdefault(value,[]).append(id)
print(index)
a = []
for key, value in index.items():
if key == target:
a = value
if a:
mi = min(a)
ma = max(a)
return [mi,ma]
else:
return [-1,-1]
💁四、别人的思路 💁
二分查找法:
1:当中间值与target相同时,分别查看左边和右边,
2:如果左边有则左下标减一,如果由下标有右下标加一。
🏃五、代码🏃
☁️ 1️⃣. python ☁️❄️
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
n = len(nums); L = 0; R = n
while L < R:
mid = int(L + (R-L)/2)
if nums[mid] == target:
start = mid - 1; end = mid + 1
while start >= 0 and nums[start] == target: start-=1
while end < n and nums[end] == target: end+=1
return [start+1, end-1]
elif nums[mid] < target: L = mid + 1
else: R = mid
return [-1, -1]
🌔 结语 🌔
☀️ 前言 ☀️算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!