美文网首页
二维数组查找

二维数组查找

作者: 勿与龙比 | 来源:发表于2018-02-10 18:39 被阅读1次

剑指offer中一个题目,用递归实现

public class Solution {
    public boolean Find(int target, int [][] array)
    {
        if (array.length == 0)
        {
            return false;
        }

        if (array[0].length == 0)
        {
            return false;
        }
        return FindInternal(target, array, 0, 0, array[0].length, array.length);
    }

    public boolean FindInternal(int target, int [][] array, int startRow, int startCol, int width, int height)
    {
        if (width <= 0 || height <= 0)
        {
            return false;
        }

        if (width == 1 && height == 1)
        {
            return target == array[startRow][startCol];
        }

        int rowMove = (height - 1) / 2;
        int colMove = (width - 1) / 2;

        int middleRow = startRow + rowMove;
        int middleCol = startCol + colMove;

        int leftwidth = 1 + colMove;
        int topHeight = 1 + rowMove;

        int rightWidth = width - leftwidth;
        int bottomHeight = height - topHeight;

        int middle = array[middleRow][middleCol];

        if (target == middle)
        {
            return true;
        }else if (target < middle)
        {
            boolean a = FindInternal(target, array, startRow, middleCol + 1, rightWidth, topHeight);
            if (a)
                return true;
            boolean b = FindInternal(target, array, middleRow + 1, startCol, leftwidth, bottomHeight);
            if (b)
                return true;
            return FindInternal(target, array, startRow, startCol, leftwidth, topHeight);
        }else
        {
            boolean a = FindInternal(target, array, startRow, middleCol + 1, rightWidth, topHeight);
            if (a)
                return true;
            boolean b = FindInternal(target, array, middleRow + 1, startCol, leftwidth, bottomHeight);
            if (b)
                return true;
            return FindInternal(target, array, middleRow + 1, middleCol + 1, rightWidth, bottomHeight);
        }


    }
}

相关文章

  • 算法题

    行列都是有序的二维数组,查找k是否存在【查找法】 二维数组中的查找(行列分别有序数组的二分查找)【递归法】 快速排...

  • 剑指Offer二维数组查找

    剑指Offer二维数组查找 二维数组查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到...

  • 剑指offer4.二维数组中的查找

    题目 题目分析 算法-二维数组中的查找 比如一个二维数组是这样: 要查找数组7在不在数组内,根据前人总结出来的规律...

  • OC各种算法,排序,查找实现

    二维数组查找数字的OC实现 OC 二分查找的实现 快速排序

  • 2019-08-07 B1004 成绩排名

    这道题用之前的二维数组的思路是不对的,因为这道题并不是对二维数组进行查找操作而是需要对二维数组进行遍历操作,因此我...

  • 《剑指offer》(一)-二维数组中的查找(java)

    数组--二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序...

  • 二维数组中的查找(Javascript编程) function Find(target, array){ // w...

  • 刷题-数组专项

    数组 二维数组中的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每...

  • 牛客网高频算法题系列-BM18-二维数组中的查找

    牛客网高频算法题系列-BM18-二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),...

  • 二维数组查找

    剑指offer中一个题目,用递归实现

网友评论

      本文标题:二维数组查找

      本文链接:https://www.haomeiwen.com/subject/ookhtftx.html