当前位置:网站首页>LeetCode 74. Search 2D matrix
LeetCode 74. Search 2D matrix
2022-07-04 08:56:00 【Sean_ Asu】
Today I saw the dichotomy summary formula of snow vegetables , I'm confused 3 I understand it a little , Simple dichotomy can be slightly understood , Search the binary matrix , I still have a little trouble , Take advantage of some ideas , Make notes for your own review .
The original title is :
Power button -74. Search the binary matrix
First of all, let's mention the dichotomy summary template of the snow cabbage boss :
Snow vegetable - Two sub topics You can take a step-by-step look at the two-part explanation here
Binary search algorithm template - Snow vegetable You can move here to see the binary template
This topic , Because all numbers are increasing in order , So you can use dichotomy
Because it's a two-dimensional array , It needs to be found in the middle middle, So first write the number of rows and columns
The two-dimensional array is shown in the figure :
Then its column number is a two-dimensional array matrix The length of : matrix.length, The number of rows is the length of the first column :matrix[0].length
Then set the leftmost left from 0 Start , Far right right It is That's ok × Column -1, Median middle It is left + (right - left) /2
then Set a check(t) function , there t Set the conditions yourself , Because all the numbers in this question are Orderly increase , I set For this condition A random number >=target, Because it's a binary array , So this number is :matrix[mid /m][mid % m] , So I if The judgment condition is matrix[mid /m][mid % m] >= target
Draw the picture according to this
here , According to your own conditions , take [L , R] It is divided into two paragraphs , On the far right is >=target Of , Then assume the midpoint middle On the right side , that It can be seen that , The left boundary of the right range is at the midpoint middle, Ask for this boundary , Its next screening range is [L , R] Turned into [ L , middle ] , If middle Fall on On the left side That is, as shown in the figure
Because the boundary you are looking for is middle The right side of the , And it doesn't belong to >target The scope of the , Then the screening range is determined by [L , R] Turned into [ middle +1 , R ] , This will confirm if-else Of The executive part of
Again , If you choose the condition opposite to the above <=target , Then the scope at this time is the part on the left , You need to find the right boundary of the left part , If at this time middle Fell on the right side , Then the screening range is determined by [L , R] Turned into [ L , middle -1 ], If it falls on the left , Then the screening range is determined by [L , R] Turned into [ middle , R ]
Finally, analyze and judge , When the array is empty , I can't find it at this time target, Then you have to return false:if(matrix.length==0 || matrix[0].length==0) return false;
If the array is not empty , But I can't find target, Return, too false:
if(matrix[r /m][r % m] != target) return false;
A certain number of two-dimensional arrays Abscissa 、 Vertical coordinate solution :
cross : Ordinal number / Row number , In this way, we can get the number of lines
longitudinal : Ordinal number % Row number , In this way, we can get the number of columns
for instance :
In the picture 16 Of coordinate , Then press from 0 Start in order ,16 The order number of should be 6, Then use 6 Go to the above to get :6 / 4 Rounding down =1,6 % 4=2
So at this time 16 The coordinate position of is :[ 1 , 2 ] first line , Second column ( That's ok 、 Columns are from 0 Start )
In this way, you can write code
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
if(matrix.length==0 || matrix[0].length==0) return false;
int n =matrix.length,m=matrix[0].length; //n Is the number of columns ,m Is the number of rows
int l =0, r=m *n -1;
while(l <r){
int mid = l + r >>1;
if(matrix[mid /m][mid % m] >= target) r = mid;
else l = mid+1;
}
if(matrix[r /m][r % m] != target) return false;
else return true;
}
}
边栏推荐
- Relationship and operation of random events
- 2022 tower crane driver examination and tower crane driver examination questions and analysis
- Four essential material websites for we media people to help you easily create popular models
- Go zero micro service practical series (IX. ultimate optimization of seckill performance)
- 如何编写单元测试用例
- High order phase difference such as smear caused by myopic surgery
- C语言-入门-基础-语法-数据类型(四)
- 到底什么才是DaaS数据即服务?别再被其他DaaS概念给误导了
- ArcGIS application (XXII) ArcMap loading lidar Las format data
- Codeforces Global Round 21(A-E)
猜你喜欢
Newh3c - network address translation (NAT)
Basic operations of databases and tables ----- view data tables
没有Kubernetes怎么玩Dapr?
4 small ways to make your Tiktok video clearer
What if the wireless network connection of the laptop is unavailable
Sequence model
Bishi blog (13) -- oral arithmetic test app
C语言-入门-基础-语法-[主函数,头文件](二)
Educational Codeforces Round 119 (Rated for Div. 2)
Explain TCP protocol in detail three handshakes and four waves
随机推荐
Display Chinese characters according to numbers
swatch
Newh3c - routing protocol (RIP, OSPF)
How to pass custom object via intent in kotlin
Manjaro install wechat
Dede plug-in (multi-function integration)
Comparison between sentinel and hystrix
Awk from entry to earth (7) conditional statements
awk从入门到入土(15)awk执行外部命令
Educational Codeforces Round 115 (Rated for Div. 2)
09 softmax regression + loss function
Awk from entry to earth (15) awk executes external commands
Flutter 集成 amap_flutter_location
Four essential material websites for we media people to help you easily create popular models
C语言-入门-基础-语法-[运算符,类型转换](六)
Sword finger offer 30 contains the stack of Min function
Codeforces Round #750 (Div. 2)(A,B,C,D,F1)
Awk from entry to soil (5) simple condition matching
C#实现一个万物皆可排序的队列
Private collection project practice sharing [Yugong series] February 2022 U3D full stack class 007 - production and setting skybox resources