题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:刚看到题时的第一反应为,遍历二维数组,每个元素一次判断和这个整数是否相等即可。但这种的时间复杂度比较高,我们可以根据题目,想到更好的算法,注意,题目中行和列的递增这个信息是非常有用的。由于是递增的,所以我们可以从每一行的最后一个元素入手,当这个整数大于这一行的最后一个元素时,那么表明它也大于这一行的其他元素,那么这一行就不需要遍历了,直接跳到下一行的最后一个元素判断,这样时间复杂度就会大大减少。
源码如下:
import java.util.*;
public class Main9
{
public static void main(String[] args)
{
Scanner s = new Scanner(System.in);
int rows = s.nextInt();
int cols = s.nextInt();
int a[][] = new int[rows][cols];
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
a[i][j] = s.nextInt();
}
}
int b = s.nextInt();
boolean isFind = findFigure(a, b);
System.out.println(isFind);
}
public static boolean findFigure(int [][]a,int b)
{
boolean isFind = false;
int rows = a.length; //数组a的行数
int columns = a[0].length; //数组a的列数
int row = 0;
int col = columns - 1;
while(row<rows && col>=0)
{
if(a[row][col]==b)
{
isFind = true;
break;
}
else if(a[row][col]>b)
{
col--;
}
else
{
row++;
}
}
return isFind;
}
}
可能还有其他比较好的方法,还望不惜吝教。
本人经验,仅供参考!