本文介绍: /按行二分查找,行不变,返回对应列下标编写一个高效的算法搜索

编写一个高效的算法搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性

示例 1:

输入matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出true

示例 2:

输入matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出false

提示:

 

  //按行二分查找,行不变,返回对应列下标

    int findRow(vector<vector<int&gt;>&amp; matrix,int row,int target)

    {

        if(matrix[row][0]>target)

        {

            return -1;

        }

        //int m=matrix.size();

        int n=matrix[0].size();

        int left=0;

        int right=n-1;

        int mid=(left+right)/2;

        while(left<=right)

        {

            mid=(left+right)/2;

            if(target==matrix[row][mid])

            {

                return mid;

            }

            if(target > matrix[row][mid])

            {

                left=mid+1;

            }

            else

            {

                right=mid-1;

            }

        }

        return -1;

    }

     int findCol(vector<vector<int>>&amp; matrix,int col,int target)

    {

        if(matrix[0][col]>target)

        {

            return -1;

        }

        int m=matrix.size();

        //int n=matrix[0].size();

        int left=0;

        int right=m-1;

        int mid=(left+right)/2;

        while(left<=right)

        {

            mid=(left+right)/2;

            if(target==matrix[mid][col])

            {

                return mid;

            }

            if(target > matrix[mid][col])

            {

                left=mid+1;

            }

            else

            {

                right=mid-1;

            }

        }

        return -1;

    }

    bool searchMatrix(vector<vector<int>>&amp; matrix, int target) {

        if(matrix[0][0]>target)

        {

            return false;

        }  

        int m=matrix.size();

        int n=matrix[0].size();

        if(findRow(matrix,0,target)!= -1)

        {

            return true;

        }

        for(int i=0;i<n;i++)

        {

            if(findCol(matrix,i,target)!= -1)

            {

                return true;

            }

        }

        return false;

    }

原文地址:https://blog.csdn.net/yinhua405/article/details/134544661

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_3394.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注