当前位置:网站首页>704 binary search
704 binary search
2022-07-06 08:35:00 【So, dream】
704. Two points search
Given a n The elements are ordered ( Ascending ) integer array nums And a target value target , Write a function search nums Medium target, If the target value has a return subscript , Otherwise return to -1.
Example 1:
Input : nums = [-1,0,3,5,9,12], target = 9
Output : 4
explain : 9 Appear in the nums And the subscript is 4
Example 2:
Input : nums = [-1,0,3,5,9,12], target = 2
Output : -1
explain : 2 non-existent nums So back to -1
Tips :
- You can assume nums All elements in are not repeated .
- n Will be in [1, 10000] Between .
- nums Each element of will be in [-9999, 9999] Between .
Ideas
For in Ordered non repeating array Find the problem of target value in , You can consider binary search to achieve .
The title says ,nums All elements in are No repetition Of , And nums Press Ascending order , So you can consider using binary search .
The logic of binary search is relatively simple , But it is easy to make mistakes in the treatment of boundary conditions . for example , We write while(left < right) and while(left <= right) The corresponding processing method is completely different .
Let's take a simple example , Suppose there is only one element in the array 5, The target target Also equal to 5. If you use while(left < right) Writing , that right Should be initialized to 1,left Initialize to 0. And if you use while(left <= right) How to write it ,left and right Should be initialized to 0. So the difference between the two ways of writing lies in Treatment of boundary conditions .
So according to the treatment of boundary conditions , There are two ways to write binary search .
The first way to write it
Suppose the array element is [1,2,3,4,5,6,7],target = 3, We use while(left < right) Writing to achieve binary sorting .
In this way ,left = 0,right = 7, The operation process is shown in the figure

The key to the code is , When nums[mid] < nums[right] when ,right = mid. In circulation right It's open range , This should also be an open interval , bring into correspondence with .
The corresponding code is as follows :(Kotlin)
class Solution {
fun search(nums: IntArray, target: Int): Int {
var left = 0
var right = nums.size // [left,right) On the right is the open section ,right Set to nums.size
while (left < right) {
val mid = (left + right) / 2
if (nums[mid] < target) left = mid + 1
else if (nums[mid] > target) right = mid // The core of the code , In circulation right It's open range , This should also be an open interval
else return mid
}
return -1 // Can't find target , return -1
}
}
The second way
Suppose the array element is [1,2,3,4,5,6,7],target = 3, We use while(left <= right) Writing to achieve binary sorting .
In this way ,`left = 0,right = 76, The operation process is shown in the figure

The key to the code is , When nums[mid] < nums[right] when ,right = mid - 1. In circulation right It's a closed interval , This should also be a closed interval , bring into correspondence with .
The corresponding code is as follows :(Kotlin)
class Solution {
fun search(nums: IntArray, target: Int): Int {
var left = 0
var right = nums.size - 1 // [left,right] The right side is the closed section ,right Set to nums.size - 1
while (left <= right) {
val mid = (left + right) / 2
if (nums[mid] < target) left = mid + 1
else if (nums[mid] > target) right = mid - 1 // The core of the code , In circulation right It's a closed interval , This should also be a closed interval
else return mid
}
return -1 // Can't find target , return -1
}
}
边栏推荐
- 优秀的软件测试人员,都具备这些能力
- 【ROS】usb_cam相机标定
- leetcode刷题 (5.29) 哈希表
- sys. argv
- China dihydrolaurenol market forecast and investment strategy report (2022 Edition)
- Sublime text using ctrl+b to run another program without closing other runs
- Crash problem of Chrome browser
- PC easy to use essential software (used)
- 生成器参数传入参数
- Image, CV2 read the conversion and size resize change of numpy array of pictures
猜你喜欢

Zhong Xuegao, who cannot be melted, cannot escape the life cycle of online celebrity products
![[brush questions] top101 must be brushed in the interview of niuke.com](/img/55/5ca957e65d48e19dbac8043e89e7d9.png)
[brush questions] top101 must be brushed in the interview of niuke.com

On the day of resignation, jd.com deleted the database and ran away, and the programmer was sentenced

【MySQL】数据库的存储过程与存储函数通关教程(完整版)

synchronized 解决共享带来的问题

The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
![[MySQL] database stored procedure and storage function clearance tutorial (full version)](/img/27/e775e03b77c7195216bc50c5cbefb4.png)
[MySQL] database stored procedure and storage function clearance tutorial (full version)

深度剖析C语言数据在内存中的存储

Hungry for 4 years + Ali for 2 years: some conclusions and Thoughts on the road of research and development

Roguelike游戏成破解重灾区,如何破局?
随机推荐
Image, CV2 read the conversion and size resize change of numpy array of pictures
Problems in loading and saving pytorch trained models
Deep analysis of C language pointer
String to leading 0
移位运算符
View computer devices in LAN
2022.02.13 - NC003. Design LRU cache structure
延迟初始化和密封类
Indentation of tabs and spaces when writing programs for sublime text
按位逻辑运算符
C语言深度解剖——C语言关键字
On the inverse order problem of 01 knapsack problem in one-dimensional state
Beijing invitation media
sublime text中conda环境中plt.show无法弹出显示图片的问题
egg. JS directory structure
sys.argv
gcc动态库fPIC和fpic编译选项差异介绍
Rviz仿真时遇到机器人瞬间回到世界坐标原点的问题及可能原因
CISP-PTE实操练习讲解
egg. JS project deployment online server