剑指offer 面试题04. 二维数组中的查找
Posted carrollcn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 面试题04. 二维数组中的查找相关的知识,希望对你有一定的参考价值。
题目描述
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:暴力暴力暴力:双层暴力 结果也能过
class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { // 第一个:二维遍历查询 if(matrix.length==0) return false; boolean res=false; for(int i=0;i<matrix.length;i++){ for(int j=0;j<matrix[0].length;j++){ if(matrix[i][j]==target){ res = true; break; } } if(res==true){ break; } } return res; } }
解法2:解法1没有利用到每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序的特性。
第一感觉:左上角到右下角,也感觉不出什么。 换成右上角到左下角,比当前值小,列-1,比当前值大,行+1.最后能找到target。如果数组越界还没有找到,那么数组中不存在target。
若数组为空,返回 false
初始化行下标为 0,列下标为二维数组的列数减 1
- 若数组为空,返回 false
- 初始化行下标为 0,列下标为二维数组的列数减 1
- 重复下列步骤,直到行下标或列下标超出边界
- 获得当前下标位置的元素 num
- 如果 num 和 target 相等,返回 true
- 如果 num 大于 target,列下标减 1
- 如果 num 小于 target,行下标加 1
- 循环体执行完毕仍未找到元素等于 target ,说明不存在这样的元素,返回 false`
class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if(matrix == null || matrix.length == 0){ return false; } int row=0,cloum=matrix[0].length-1; while(row<matrix.length && cloum>=0){ if(target==matrix[row][cloum]){ return true; } else if(target<matrix[row][cloum]){ cloum--; } else row++; } return false; } }
以上是关于剑指offer 面试题04. 二维数组中的查找的主要内容,如果未能解决你的问题,请参考以下文章