34. 在排序数组中查找元素的第一个和最后一个位置(2)
2023-09-14 09:01:26 时间
二分法的功能
- 查找某个元素的位置
- 查找某个元素的起始位置和末位置 to put it anthoer way 可以找到比该元素小或者比该元素大的元素的位置 进而可以找到该元素
python的三元表达式
item if condition else item
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
# 三种情况 二分查找也可以定位元素位置
'''
1 元素在数组的左边或者右边 但不属于数组
2 元素在数组里面
3 元素在数组范围内 但不在数组里面
'''
def get_right(nums,target):
_riht = -2 # 标记情况1,元素在数组最左边
left,right = 0,len(nums)-1 # 左闭右闭
while left <= right:
middle = (left + right) // 2
if nums[middle] > target:
right = middle - 1
else: # 包括小于或者等于的情况
left = middle + 1
_riht = left
return _riht
def get_left(nums,target):
_left = -2 # 标记情况1,元素在数组最左边
left,right = 0,len(nums)-1 # 左闭右闭
while left <= right:
middle = (left + right) // 2
if nums[middle] >= target:
right = middle - 1
_left = right
else: # 包括大于或者等于的情况
left = middle + 1
return _left
right = get_right(nums,target)
left = get_left(nums,target)
# 情况一right
if right == -2 or left == -2:
return [-1,-1]
# 情况二
if (right - left)> 1:
return [left+1,right-1]
# 情况三
return [-1,-1]
```-
刷题过程中注意分类讨论
```python
有一个有序数组nums和一个target
如果这个数在数组里面,那么返回第一个比这个数大的数
如果这个数不在数组里面,那么返回-1
'''
def solution(nums,target):
left,right = 0,len(nums)-1
r = -2
while left <= right:
middle= (left + right)//2
if nums[middle] > target:
right = middle - 1
else:
left = middle + 1
r = left
return r
def solution2(nums,target):
left,right = 0,len(nums)-1
r = -2
while left <= right:
middle= (left + right)//2
if nums[middle] >= target:
right = middle - 1
r = right
else:
left = middle + 1
return r
r = solution([1,2,3,4,5,6],5)
l = solution2([1,2,3,4,5,6],5)
print(r)
# 元素不在数组里面
if r == -2 or l == -2:
print( -1 )
# 元素在里面
if (r - l) > 1:
print( [1,2,3,4,5,6][r-1] if r<len([1,2,3,4,5,6]) else -1)
print( -1 )
相关文章
- Go数组和切片
- java之二维数组初始化
- 【说站】php数组排序并保持索引关系
- C语言:数组作为函数参数(数组元素做实参,数组名称做形参)
- 分别用冒泡法和选择法对10个整数排序_c语言数组从大到小冒泡排序
- 字节数组转字符串技巧以及其JMH性能分析
- 归并排序应用——剑指 Offer 51. 数组中的逆序对
- 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-493 合并排序数组
- 力扣26-删除有序数组中的重复项
- 二维数组
- 【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 )
- 2022-04-23:给定你一个整数数组 nums 我们要将 nums 数组中的每个元素移动到 A 集合 或者 B 集合中 使得 A 集合和 B 集合不为空,并
- MySQL中如何分割字符串数组的简单方法(mysql分割字符串数组)
- Oracle数组的定义与使用(oracle数组定义)
- php关于array_multisort多维数组排序的使用说明
- phparray_map()数组函数使用说明
- php数组函数序列之sort()对数组的元素值进行升序排序
- c语言合并两个已排序数组的示例(c语言数组排序)
- php实例分享之二维数组排序
- C++指针数组、数组指针、数组名及二维数组技巧汇总