Skip to content

Latest commit

 

History

History

073. Search a 2D Matrix

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

这道题看似很简单,擦,意外真多啊。

我 submit 了不下5次,几乎把各种边界用例都搜集全了。所以说,小到二分查找算法,都有无数坑等着你。

矩阵只是个幌子,这道题的本质还在于考察查找算法,你把矩阵变成一个更大的数组就行了(注意看题意中的两个属性,天然有序,二分查找)。

而在这个大矩阵(n*m)中,pos[i]的行恰是 i/n,列恰是 i%n。这就是本题的重点。

难点在于,怎么把控好不越界,怎么不需要重复判断一些条件。我觉得能够一次性把这道题写对的人,思维一定是超级严密的,可以去微软面试去了。

最后我的教训是: 不要把标准的二分查找算法往里面硬套,一定要结合具体情况微调。死用算法是大忌,切记。

这道题微调的地方在于,

[1,2,3,4,5,6,7,8,9]
 ^       ^       ^
 low    mid     high
// find 3
[1,2,3,4,5,6,7,8,9]
 ^       ^
 low    mid
        high

注意 high 的位置,为了避免溢出,要让high == mid. 然后返回之际,只需判断 pos[high] ?= target 即可。