二维数组中的查找 Java实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
测试用例:
array为:
{1, 2, 8, 9}
{2, 4, 9, 12}
{4, 7, 10, 13}
{6, 8, 11, 15}
target:1
思路:
先与第一行最后一列的数比较,target较大则继续比较下一行最后一列值,较小则列值减1与之比较,直到找到相等值或全部比较完结束循环,返回结果
代码:
import java.util.Scanner;
public class Test1 {
private static boolean Find(int target, int[][] array) {
int rowTotal = array.length;//获取数组行数
int columnTotal = array[0].length;//获取数组列数
/*
* 判断数组是否为空、行数和列数是否不为0,不满足直接false
*/
if(array != null && rowTotal > 0 && columnTotal > 0) {
int row = 0;
int column = columnTotal - 1;
while(row < rowTotal && column >= 0) {//确保正在判断的是该数组的合法元素
if(array[row][column] < target) {//若target大于该行最大的数,则行数加1
row++;
}else if(array[row][column] > target){//若target小于当前元素的值,则列数减1
column--;
}else {
return true;
}
}
}
return false;
}
public static void main(String[] args) {
int[][] array = {
{1, 2, 8, 9},
{2, 4, 9, 12},
{4, 7, 10, 13},
{6, 8, 11, 15}
};
Scanner scanner = new Scanner(System.in);
int target = scanner.nextInt();
System.out.println(Find(target, array));
}
}