小渣渣的算法学习笔记:2018秋招备战
数据结构类算法总结:二维数组
1.题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
2.思路解析:
首先二维数组每行、每列从左到右递增顺序排序。解决复杂问题的有效方法就是从一个具体的问题入手,分析简单的例子寻找
普遍的规律。首先选取数组右上角的数字与目标数字作比较,如果相等查找结束;如果大于目标数字,说明要找的数字不在当前列,列数减1;如果小于目标数字,说明要找的数字不在当前行,行数+1.这样每次筛选范围缩小很快,不会出现从矩阵中间随意选择一个数字验证时结果出现在交叉区域的问题。每一次都在数组的查找范围剔除一行或者一列,每一步都可以缩小查找范围。
3.代码实现:
public class Solution01 { public static void main(String[]args){ int[][] arr= { {1,2,8,9}, {2,4,9,12}, {4,7,10,13}, {6,8,11,15} }; System.out.println(new Solution01().Find(arr,4,4,0)); } public boolean Find(int [][] array,int rows,int columns,int target){ int len = array.length; int row = 0; int column = columns - 1; if(len > 0 && rows > 0 && columns > 0){ while(row < rows && column >= 0){//行列不超过总行列数 if(array[row][column] == target){ return true; }else if(array[row][column] > target){ --column; }else{ ++row; } } } return false; } }