当前位置:网站首页>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
}
}
边栏推荐
- marathon-envs项目环境配置(强化学习模仿参考动作)
- Cisp-pte practice explanation
- Research Report on Market Research and investment strategy of microcrystalline graphite materials in China (2022 Edition)
- 2022.02.13 - 238. Maximum number of "balloons"
- Analysis of the source code of cocos2d-x for mobile game security (mobile game reverse and protection)
- Golang force buckle leetcode 1020 Number of enclaves
- Char to leading 0
- egg. JS getting started navigation: installation, use and learning
- Modify the video name from the name mapping relationship in the table
- 游戏解包的危害及资源加密的重要性
猜你喜欢
sublime text没关闭其他运行就使用CTRL+b运行另外的程序问题
软件卸载时遇到trying to use is on a network resource that is unavailable
MySQL learning record 11jdbcstatement object, SQL injection problem and Preparedstatement object
Configuring OSPF load sharing for Huawei devices
Circular reference of ES6 module
Analysis of the source code of cocos2d-x for mobile game security (mobile game reverse and protection)
sublime text中conda环境中plt.show无法弹出显示图片的问题
Bottom up - physical layer
Pointer advanced --- pointer array, array pointer
Unified ordering background interface product description Chinese garbled
随机推荐
电脑清理,删除的系统文件
The resources of underground pipe holes are tight, and the air blowing micro cable is not fragrant?
2022.02.13 - NC001. Reverse linked list
Deep analysis of C language data storage in memory
Deep learning: derivation of shallow neural networks and deep neural networks
gcc动态库fPIC和fpic编译选项差异介绍
【MySQL】日志
LDAP Application Section (4) Jenkins Access
Colorlog结合logging打印有颜色的日志
vulnhub hackme: 1
ROS编译 调用第三方动态库(xxx.so)
sys. argv
Sublime text using ctrl+b to run another program without closing other runs
【MySQL】鎖
Char to leading 0
Hungry for 4 years + Ali for 2 years: some conclusions and Thoughts on the road of research and development
poi追加写EXCEL文件
String to leading 0
按位逻辑运算符
MySQL learning records 12jdbc operation transactions