生活随笔
收集整理的這篇文章主要介紹了
【Leetcode】二分法左侧边界右侧边界模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在升序數組中找到目標值的索引:
輸入: nums = [1,3,5,6], target = 5
輸出: 2
class Solution:def searchTarget(self
, nums
: List
[int], target
: int) -> int:left
= 0right
= len(nums
)-1while left
<=right
:mid
= left
+ (right
- left
) // 2if nums
[mid
] == target
:return mid
elif nums
[mid
] > target
:right
= mid
- 1else:left
= mid
+ 1
在升序數組中找到目標值,如果沒有目標值,返回插入位置索引:
輸入: nums = [1,3,5,6], target = 2
輸出: 1
class Solution:def searchInsert(self
, nums
: List
[int], target
: int) -> int:left
= 0right
= len(nums
)-1while left
<=right
:mid
= left
+ (right
- left
) // 2if nums
[mid
] == target
:return mid
elif nums
[mid
] > target
:right
= mid
- 1else:left
= mid
+ 1return left
在升序數組中找到目標值,返回左側邊界:
輸入: nums = [1,3,3,3,3,5,6], target = 3
輸出: 1
class Solution:def searchRange(self
, nums
, target
):left
= 0right
= len(nums
)-1while(left
<=right
):mid
= left
+ (right
-left
)//2if nums
[mid
] == target
:right
= mid
- 1elif nums
[mid
] > target
:right
= mid
- 1else:left
= mid
+ 1if left
>=len(nums
) or nums
[left
]!=target
:return -1return left
在升序數組中找到目標值,返回右側邊界:
輸入: nums = [1,3,3,3,3,5,6], target = 3
輸出: 4
class Solution:def searchRightBound(self
, nums
, target
):left
= 0right
= len(nums
)-1while(left
<=right
):mid
= left
+ (right
-left
)//2if nums
[mid
] == target
:left
= mid
+ 1elif nums
[mid
] > target
:right
= mid
- 1else:left
= mid
+ 1if nums
[right
]!=target
or right
>len(nums
)-1:return -1return right
在升序數組中找到目標值,同時返回左右側邊界:
輸入:nums = [5,7,7,8,8,10], target = 8
輸出:[3,4]
class Solution:def searchRange(self
, nums
: List
[int], target
: int) -> List
[int]:left
= 0right
= len(nums
)-1res
= [0,0]if target
not in nums
:return [-1,-1]while(left
<=right
):mid
= left
+ (right
-left
)//2if nums
[mid
] == target
:right
= mid
- 1elif nums
[mid
] > target
:right
= mid
- 1else:left
= mid
+ 1if left
>=len(nums
) or nums
[left
]!=target
:res
[0] = -1res
[0] = leftright
= len(nums
)-1while left
<=right
:mid
= left
+(right
-left
)//2if nums
[mid
]==target
:left
= mid
+ 1elif nums
[mid
]>target
:right
= mid
- 1else:left
= mid
+ 1if right
<0 or nums
[right
]!=target
:res
[1] = -1res
[1] = right
return res
猜你喜歡:👇🏻
?【Leetcode】大神總結的所有TopK問題模板(基于快速排序)
?【Leetcode】島嶼問題(數量,周長,面積)
?【Leetcode】背包問題模板
總結
以上是生活随笔為你收集整理的【Leetcode】二分法左侧边界右侧边界模板的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。