美文网首页
面试题4:二位数组中的查找

面试题4:二位数组中的查找

作者: 繁星追逐 | 来源:发表于2019-08-02 09:25 被阅读0次

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1,使用二分查找,第一个for循环用于控制行,在每一行作二分查找,循环指针满足大小关系,如果目标值大于当前值,到中间值后面去查找,如果目标值小于当前值就去前面查找,否则就找到跳出去。一直没有跳出去就返回false
2,首选选取二位数组右上角的数,如果当前位置的数恰好等于要找的数,则退出,如果当前元素大于要找的数则去掉第一行,也就是行数+1,如果小于要找的数,则去掉当前列,即列数减一。

/**
     * 从右上角元素开始比较,相等则是
     * 大于该元素就可以去掉上面一行
     * 小于该元素则可以去掉右边一列
     * 下标作为变量进行移动
     * @param target
     * @param array
     * @return
     */
    public boolean Find(int target, int [][] array) {
        boolean flag = false;
        int row = 0;
        int column = array[0].length-1;
        /***
         * 注意元素列元素下标包括0
         */
        while (row < array.length && column >= 0) {
            if (target == array[row][column]) {
                flag = true;
                return flag;
            } else if (target < array[row][column]) {
                --column;
            }else {
                ++row;
            }
        }
        return flag;
    }

    /**
     * 二分法查找
     * @param target
     * @param array
     * @return
     */
    public boolean Find2(int target, int[][] array) {
        if (array != null && array.length > 0) {
            // 注意high在循环外,一旦值更新下次循环不会再被初始化,可减少比较次数
            int high = array[0].length - 1;
            for (int i = 0; i < array.length; i++) {
                int low = 0;
                while (low <= high) {
                    int mid = low + (high - low) / 2;
                    if (target > array[i][mid]) {
                        low = mid + 1;
                    } else if (target < array[i][mid]) {
                        high = mid - 1;
                    } else {
                        return true;
                    }
                }
            }
            return false;
        }
        return false;
    }

相关文章

  • 剑指offer

    面试题3——数组中重复的数字 使用LinkedHashMap,有序存放。 面试题4——二维数组中的查找 首先选...

  • 剑指offer面试题分类总结

    数组: 面试题3:数组中重复的数字面试题4:二维数组中的查找面试题21:调整数组顺序使奇数位于偶数前面面试题39:...

  • 2.3.1 数组

    面试题3:数组中重复的数字 面试题4:二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一...

  • 面试题4:二位数组中的查找

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的...

  • 《剑指Offer》-Exercise(C语言)

    面试题4:二维数组中的查找 面试题6:从尾到头打印链表 单链表从尾到头打印(用栈或递归) 单链表结构 面试题7:重...

  • 剑指offer第二版-4.二维数组中的查找

    本系列导航:剑指offer(第二版)java实现导航帖 面试题4:二维数组中的查找 题目要求:一个二维数组中,每一...

  • LeetCode | 面试题04. 二维数组中的查找【剑指Off

    LeetCode 面试题04. 二维数组中的查找【剑指Offer】【Easy】【Python】【数组】 问题 力扣...

  • 查找

    查找 折半查找: 面试题: 给定一个有序的数组,如果往该数组中存储一个数,并保证这个数组还是有序的,那么这个元素的...

  • 二维数组中的查找

    《剑指offer》面试题4:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都...

  • 剑指offer每日一更

    题目 // 面试题4:二维数组中的查找// 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按...

网友评论

      本文标题:面试题4:二位数组中的查找

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