欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(java)二维数组中的查找

程序员文章站 2022-03-14 23:05:40
...

(java)二维数组中的查找

分析:此题目我们可以从右上角或者左下角进行比较。我们以右上角为例,每次拿右上角的元素与目标元素进行比较,分为三种情况,(1)右上角元素大于目标值,则目标元素在当前二维数组的下方;(2)右上角元素小于目标值,则目标元素在当前二维数组的左方;(3)等于则说明找到目标元素;

(java)二维数组中的查找

代码实现如下:

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;
    }
}

注:我们不能从左上角与右下角元素开始比较,因为我们无法缩小二维数组。