当前位置:网站首页>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
}
}
边栏推荐
- 化不掉的钟薛高,逃不出网红产品的生命周期
- 2022.02.13 - NC004. Print number of loops
- logback1.3. X configuration details and Practice
- 角色动画(Character Animation)的现状与趋势
- Sublime text using ctrl+b to run another program without closing other runs
- MySQL learning record 07 index (simple understanding)
- 优秀的软件测试人员,都具备这些能力
- [brush questions] top101 must be brushed in the interview of niuke.com
- China vanadium battery Market Research and future prospects report (2022 Edition)
- PLT in Matplotlib tight_ layout()
猜你喜欢
704 二分查找
2022.02.13 - NC004. Print number of loops
leetcode刷题 (5.28) 哈希表
Deep analysis of C language pointer
PC easy to use essential software (used)
指针进阶---指针数组,数组指针
pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof
swagger设置字段required必填
PLT in Matplotlib tight_ layout()
JVM performance tuning and practical basic theory - Part 1
随机推荐
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
化不掉的钟薛高,逃不出网红产品的生命周期
2022.02.13 - 238. Maximum number of "balloons"
3. File operation 3-with
Chrome浏览器的crash问题
Colorlog combined with logging to print colored logs
logback1.3. X configuration details and Practice
Roguelike game into crack the hardest hit areas, how to break the bureau?
电脑清理,删除的系统文件
[MySQL] database stored procedure and storage function clearance tutorial (full version)
优秀的软件测试人员,都具备这些能力
Roguelike游戏成破解重灾区,如何破局?
Colorlog结合logging打印有颜色的日志
【刷题】牛客网面试必刷TOP101
2022 Inner Mongolia latest construction tower crane (construction special operation) simulation examination question bank and answers
软件卸载时遇到trying to use is on a network resource that is unavailable
On the inverse order problem of 01 knapsack problem in one-dimensional state
China Light conveyor belt in-depth research and investment strategy report (2022 Edition)
The network model established by torch is displayed by torch viz
从表中名称映射关系修改视频名称