美文网首页
二维数组中的查找

二维数组中的查找

作者: 克里斯加德纳 | 来源:发表于2017-08-23 13:38 被阅读0次

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

语言Java

方法一:

1.遍历每一行
2.对每一行进行二分法查找

public class Solution {
    public boolean Find(int target, int [][] array) {
        for(int i = 0;i<array.length;i++){
            int low = 0;
            int high = array[i].length-1;
            while(low<=high)
            {
                int mid = (low+high)/2;
                if(target>array[i][mid])
                   low = mid+1;
                else if (target<array[i][mid])
                   high = mid-1;
                else
                   return true; 
            }
        }
        return false;
    }
}

注意:二分法while的循环调节必须是带有等号、否则会少遍历最后一个数;

方法二:
1.从数组的左下那数开始(右上也可、左上和右下不可以)与目标数进行比较
2.如果大于目标数则在该数的左边、如果小于这个数则在该数的上边

public class Solution {
    public boolean Find(int target, int [][] array) {
        int x = array.length - 1;
        int y = 0;
        while(x>=0&&y<array[x].length)
        {
            if(target==array[x][y]){
                return true;
            }else if(target >array[x][y])
                y ++;
            else
                x --;
        }
        return false;
    }
}

错误方法
1.对列二分法
2.对行二分法

public class Solution {
    public boolean Find(int target, int [][] array) {
        int low = 0;
        int high = array.length-1;
        while(low<=high)
        {
            int mid = (low+high)/2;
            if(target>array[mid][0])
                low = mid + 1;
            else if(target<array[mid][0])
                high = mid - 1;
            else
                return true;
        }
        int rowlow = 0;
        int rowhigh = array[high].length-1;
        while(rowlow<=rowhigh)
        {
            int mid = (rowlow+rowhigh)/2;
            if(target>array[high][mid])
                rowlow = mid + 1;
            else if(target<array[high][mid])
                rowhigh = mid - 1;
            else
                return true;
        }
        return false;
    }
}

这个方法不能通过的原因如下

测试用例:
7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

对应输出应该为:

true

你的输出为:

false

相关文章

  • 算法题

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

  • 剑指Offer二维数组查找

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

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

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

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

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

  • 刷题-数组专项

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

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

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

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

  • 数组——二维数组中查找

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

  • LeetCode 每日一题 [39] 二维数组中的查找

    LeetCode 二维数组中的查找 [简单] 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序...

  • 剑指offer(Java版)day01:二维数组中的查找|替换空

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

网友评论

      本文标题:二维数组中的查找

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