zoukankan      html  css  js  c++  java
  • 55搜索二维矩阵 II(240)

    作者: Turbo时间限制: 1S章节: 二分查找

    晚于: 2020-08-12 12:00:00后提交分数乘系数50%

    截止日期: 2020-08-19 12:00:00

    问题描述 :

    编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。要求使用二分查找。

    该矩阵具有以下特性:

    每行的元素从左到右升序排列。

    每列的元素从上到下升序排列。

    说明:以上所说的升序,由于中间存在重复元素,因此严格来说,“升序”应该理解成“非递减”

    示例:

    现有矩阵 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。

    给定 target = 20,返回 false。

    可使用以下main函数:

    int main()

    {

        vector<vector<int> > matrix;

        int target;

        int m,n,e;

        cin>>m;

        cin>>n;

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

        {

            vector<int> aRow;

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

            {

                cin>>e;

                aRow.push_back(e);

            }

            matrix.push_back(aRow);

        }

        cin>>target;

        bool res=Solution().searchMatrix(matrix,target);

        cout<<(res?"true":"false")<<endl;

        return 0;

    }

    输入说明 :

    首先输入matrix的行数m、列数n,

    然后输入m行,每行n个整数。

    最后输入一个整数target。

    输出说明 :

    输出true或false

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <vector>
    using namespace std;
    
    class Solution {
    public:
        bool searchMatrix(vector<vector<int>>& matrix, int target) 
        {
            if(matrix.size()==0||matrix[0].size()==0)
                return false;
            int m=matrix.size()-1,n=0;
            //从左下角的元素开始判断,因为他一定是列的最小,行的最大 
            while(m>=0&&n<matrix[0].size())
            {
                if(target==matrix[m][n]) 
                    return true;
                else if(target<matrix[m][n])//目标值小于左下角的值,行数上移 
                    m--;
                else
                    n++;//否则,列数右移 
            }
            return false;
        }
    };
    int main()
    {
        vector<vector<int> > matrix;
        int target;
        int m,n,e;
        cin>>m;
        cin>>n;
        for(int i=0; i<m; i++)
        {
            vector<int> aRow;
            for(int j=0; j<n; j++)
            {
                cin>>e;
                aRow.push_back(e);
            }
            matrix.push_back(aRow);
        }
        cin>>target;
        bool res=Solution().searchMatrix(matrix,target);
        cout<<(res?"true":"false")<<endl;
        return 0;
    }
  • 相关阅读:
    Java内存泄漏的排查总结
    多文本匹配 AC算法(Aho-Corasick)
    Linux下进程管理利器—supervise(监控并将死掉的程序重启)
    maven pom项目的dependencies转gradle格式
    Protocol Buffers官方文档(开发指南)
    Spring的工具类StringUtils使用
    springboot2 中Druid和ibatis(baomidou) 遇到org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.iflytek.pandaai.service.multi.mapper.TanancyMapper
    gradle 多模块Springboot项目 compile project引用其他模块的坑
    JAVA 运行springboot jar包设置classpath
    mysql8
  • 原文地址:https://www.cnblogs.com/zmmm/p/13635891.html
Copyright © 2011-2022 走看看