题解 | 二维数组中的查找

二维数组中的查找

https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param target int整型 
     * @param array int整型二维数组 
     * @return bool布尔型
     */
    public boolean Find (int target, int[][] array) {
        // write code here
        // 时间复杂度O(n * m),待优化
        // 数组为空直接返回false
        if(array == null || array.length == 0 || array[0].length == 0){
            return false;
        }
        // target小于最小元素或者大于最大元素,也可以直接返回false
        if(array[0][0] > target || array[array.length - 1][array[0].length - 1] < target){
            return false;
        }

        int line = 0, lineEnd = array.length - 1;
        // 遍历数组行
        while(line <= lineEnd){
            int rowLeft = 0, rowRight = array[0].length - 1;
            // 遍历某行里的所有元素
            while(rowLeft < rowRight){
                // 或者本行最中间元素的值,判断方式和一维数组一样
                int mid = (rowLeft + rowRight) / 2;
                int curVal = array[line][mid];
                if(curVal == target){
                    return true;
                } else if (curVal > target){
                    rowRight = mid;
                } else {
                    rowLeft = mid;
                }

                if(rowRight - rowLeft == 1){
                    if(array[line][rowLeft] == target || array[line][rowRight] == target){
                        return true;
                    }
                    break;
                }
            }
            // 判断下一行
            line++;
        }

        // 如果没找到则默认返回false
        return false;
    }
}

数据结构与算法 文章被收录于专栏

数据结构与算法相关题解

全部评论

相关推荐

04-03 22:41
兰州大学 C++
老六f:有时候是HR发错了,我之前投的百度的后端开发,他给我发的算法工程师,但是确实面的就是百度开发
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务