此系列是我用kotlin二刷leetcode写的总结,会总结用各个方法做的题目以及心得,主要是剑指offer专栏的题目
二叉树搜索
第一题剑指offer_04在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
细节:
-此题目虽然是一个二维数组但是其实如果从右上角或者左下角来看的话就是一颗二叉搜索树,可以利用线性查找找到目标值,要练习自己抽象题目的能力,才可以更快找到好的解答
代码:
fun findNumberIn2DArray(matrix: Array<IntArray>, target: Int): Boolean {
val width=matrix.size
if(width==0)return false
val height=matrix[0].size
if(height==0)return false
val point= arrayOf(0,height-1)
while (true){
val num=matrix[point[0]][point[1]]
if(num==target)return true
if(num<target) {
if(point[0]==width-1)return false
point[0]++
}
if(num>target) {
if(point[1]==0)return false
point[1]--
}
}
return false
}