(java)二维数组中的查找
程序员文章站
2022-03-14 23:05:40
...
分析:此题目我们可以从右上角或者左下角进行比较。我们以右上角为例,每次拿右上角的元素与目标元素进行比较,分为三种情况,(1)右上角元素大于目标值,则目标元素在当前二维数组的下方;(2)右上角元素小于目标值,则目标元素在当前二维数组的左方;(3)等于则说明找到目标元素;
代码实现如下:
package com.example.offer;
public class FindNumTest {
public static void main(String[] args) {
int[][] array={ {1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}};
int [][] arr={{},{}};
int num=7;
boolean flag=findNum( arr,num);
if(flag){
System.out.println("矩阵中含有指定数字!");
}else{
System.out.println("矩阵中不含有指定数字!");
}
}
/**
* 在二维数组中查找指定的数字,有两种查找方式,一是左下角开始查找,二是从右上角开始查找
* 此方法我们从右上角开始查找
* @param array
* @param num
* @return
*/
private static boolean findNum(int[][] array, int num) {
if(array!=null && array.length>0){ //避免空指针
int row=0;
int columns=array[0].length-1;
//每次都取右上角的元素与目标元素进行比较
while(row<array.length && columns>0){
if(num>array[row][columns]){
row++;
}else if(num<array[row][columns]){
columns--;
}else{
System.out.println("行:"+(row+1)+",列:"+(columns+1));
return true;
}
}
return false;
}
return false;
}
}
注:我们不能从左上角与右下角元素开始比较,因为我们无法缩小二维数组。