Skip to content

Commit d9098c2

Browse files
committed
[1201]ADD:LC-34
1 parent d94f60c commit d9098c2

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

Diff for: readme.md

+3
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
[[20201127]1277. 统计全为 1 的正方形子矩阵-Medium](动态规划/前缀和/1277.%20统计全为%201%20的正方形子矩阵-Medium.md)
5353
[[20201129]976. 三角形的最大周长-Easy](贪心/976.%20三角形的最大周长-Easy.md)
5454
[[20201130]5. 最长回文子串-Medium](动态规划/5.%20最长回文子串-Medium.md)
55+
## 2020.12
56+
[[20201201]34. 在排序数组中查找元素的第一个和最后一个位置-Medium](数组/34.%20在排序数组中查找元素的第一个和最后一个位置-Medium.md)
5557

5658
# 按类别归类
5759
##
@@ -69,6 +71,7 @@
6971
[剑指 Offer 54. 二叉搜索树的第k大节点 - Easy](./树/剑指%20Offer%2054.%20二叉搜索树的第k大节点%20-%20Easy.md)
7072

7173
## 数组和双指针
74+
[34. 在排序数组中查找元素的第一个和最后一个位置-Medium](数组/34.%20在排序数组中查找元素的第一个和最后一个位置-Medium.md)
7275
[15. 三数之和 - Medium](双指针/15.%20三数之和%20-%20Medium.md)
7376
[18. 四数之和-Medium](双指针/18.%20四数之和-medium.md)
7477
[560. 和为K的子数组-Medium](数组/560.%20和为K的子数组-Medium.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# [Description](https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array)
2+
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
3+
4+
如果数组中不存在目标值 target,返回 [-1, -1]
5+
6+
进阶:
7+
8+
你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?
9+
 
10+
11+
示例 1:
12+
```python
13+
输入:nums = [5,7,7,8,8,10], target = 8
14+
输出:[3,4]
15+
```
16+
示例 2:
17+
```python
18+
输入:nums = [5,7,7,8,8,10], target = 6
19+
输出:[-1,-1]
20+
```
21+
示例 3:
22+
```python
23+
输入:nums = [], target = 0
24+
输出:[-1,-1]
25+
```
26+
27+
提示:
28+
29+
- 0 <= nums.length <= 105
30+
- -109 <= nums[i] <= 109
31+
- nums 是一个非递减数组
32+
- -109 <= target <= 109
33+
34+
# Solution
35+
- 遇到**排序数组**尽量考虑**二分法**解题
36+
- 时间复杂度:O(logn)
37+
- 空间复杂度:O(1)
38+
```python
39+
class Solution:
40+
def searchRange(self, nums: List[int], target: int) -> List[int]:
41+
start, end = 0, len(nums)-1
42+
while start <= end:
43+
mid = (end+start)//2
44+
if nums[mid] > target:
45+
end = mid-1
46+
elif nums[mid] < target:
47+
start = mid+1
48+
else:
49+
min_index, max_index = mid, mid
50+
while min_index - 1 >= 0 and nums[min_index-1] == target:
51+
min_index -= 1
52+
while max_index + 1 <= len(nums)-1 and nums[max_index+1] == target:
53+
max_index += 1
54+
55+
return [min_index, max_index]
56+
57+
return [-1, -1]
58+
```

0 commit comments

Comments
 (0)