当前位置:网站首页>Binary search template
Binary search template
2022-07-05 05:42:00 【A big pigeon】
author :labuladong
link :https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-xiang-jie-by-labuladong/
source : Power button (LeetCode)
Give a binary search template , Include : Binary search target value , Left boundary , Right border .
(Java and Python edition )
It's easy to find the target value directly ,
nums[mid]<target, Compress left left = mid +1
nums[mid]>target, Compress right right = mid -1
nums[mid]==target , return mid
Find the first two parts of the left boundary, similar to , but nums[mid]==target Continue to compress the right boundary , Lock left boundary , Finally, return to the left boundary . Pay attention to handling cross-border situations .
Finding the right boundary is the same as .
int binary_search(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while(left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) {
left = mid + 1;
} else if (nums[mid] > target) {
right = mid - 1;
} else if(nums[mid] == target) {
// Go straight back to
return mid;
}
}
// Go straight back to
return -1;
}
int left_bound(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) {
left = mid + 1;
} else if (nums[mid] > target) {
right = mid - 1;
} else if (nums[mid] == target) {
// Don't go back , Lock the left border
right = mid - 1;
}
}
// Finally, check left The situation of crossing the border
if (left >= nums.length || nums[left] != target)
return -1;
return left;
}
int right_bound(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) {
left = mid + 1;
} else if (nums[mid] > target) {
right = mid - 1;
} else if (nums[mid] == target) {
// Don't go back , Lock the right border
left = mid + 1;
}
}
// Finally, check right The situation of crossing the border
if (right < 0 || nums[right] != target)
return -1;
return right;
}
class Solution:
def binary_search(self,nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid - 1
elif nums[mid] == target:
return mid
return -1
def left_bound(self,nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid - 1
elif nums[mid] == target:
right = mid -1
if left >= len(nums) or nums[left] != target:
return -1
return left
def right_bound(self,nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid - 1
elif nums[mid] ==target:
left = mid + 1
if right < 0 or nums[right] != target:
return -1
return right
边栏推荐
- Sword finger offer 06 Print linked list from beginning to end
- Add level control and logger level control of Solon logging plug-in
- Wazuh開源主機安全解决方案的簡介與使用體驗
- Talking about JVM (frequent interview)
- 每日一题-搜索二维矩阵ps二维数组的查找
- Add level control and logger level control of Solon logging plug-in
- [jailhouse article] jailhouse hypervisor
- Introduction and experience of wazuh open source host security solution
- Control Unit 控制部件
- Sword finger offer 04 Search in two-dimensional array
猜你喜欢
Graduation project of game mall
Sword finger offer 06 Print linked list from beginning to end
2017 USP Try-outs C. Coprimes
[jailhouse article] performance measurements for hypervisors on embedded ARM processors
浅谈JVM(面试常考)
Solution to game 10 of the personal field
Full Permutation Code (recursive writing)
CCPC Weihai 2021m eight hundred and ten thousand nine hundred and seventy-five
Corridor and bridge distribution (csp-s-2021-t1) popular problem solution
Chapter 6 data flow modeling - after class exercises
随机推荐
Sword finger offer 06 Print linked list from beginning to end
Kubedm series-00-overview
Sword finger offer 05 Replace spaces
Web APIs DOM node
Simply sort out the types of sockets
Typical use cases for knapsacks, queues, and stacks
After setting up the database and website When you open the app for testing, it shows that the server is being maintained
Corridor and bridge distribution (csp-s-2021-t1) popular problem solution
从Dijkstra的图灵奖演讲论科技创业者特点
Control Unit 控制部件
剑指 Offer 09. 用两个栈实现队列
Maximum number of "balloons"
CCPC Weihai 2021m eight hundred and ten thousand nine hundred and seventy-five
Individual game 12
【Jailhouse 文章】Look Mum, no VM Exits
How to adjust bugs in general projects ----- take you through the whole process by hand
Bit mask of bit operation
CF1634 F. Fibonacci Additions
Codeforces Round #732 (Div. 2) D. AquaMoon and Chess
Remote upgrade afraid of cutting beard? Explain FOTA safety upgrade in detail