zoukankan      html  css  js  c++  java
  • 二维数组中的查找

    题目描述

    时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
    根据题意,做简易的示意图:
     
    编程语言:C++
    思路一:暴力破解,结果不通过,于是另谋它路
    思路二:每一行都是有序的,可对每一行进行查找,采用二分查找算法,时间复杂度nlog2(n)
    class Solution {
    public:
        bool Find(int target, vector<vector<int> > array) {
            bool flag = false;
            int row = array.size();
            int col = array.size();
            for(int i = 0;i < row -1;i++)
            {
                int left = 0,right = col-1;
                while(left <= right)
                {
                    int mid = (left + right) / 2;
                    if(array[i][mid] == target)
                        flag = true;
                    else if(array[i][mid] > target)
                        left = mid+1;
                    else
                        right = mid - 1;
                }
            }
            return flag;
        }
    };
    但最后报出复杂度过高问题
    思路三:(来自网上大牛提供)根据提供的二维数组,从上往下,从左往右都是递增有序的规律,那么从左下或右上开始,将元素array[row][col] 与 target进行比较,(假如从左下开始)array[row][col]  < target,那必在元素的右边,col++,如果array[row][col]  > target,那必在元素的上面,row--
    class Solution {
    public:
        bool Find(int target, vector<vector<int> > array) {
           int num_row = array.size();
           int num_col = array[0].size();
           int i,j;
            for(i = num_row-1,j= 0;i >= 0&&j < num_col; )
            {
                if(array[i][j] == target)
                {
                    return true;
                }
                else if(array[i][j] > target)
                {
                    i--;
                    continue;
                }
                else
                {
                    j++;
                    continue;
                }
                
            }
           return false;
        }
    };

    这终于成功通过

  • 相关阅读:
    .net core 操作域控 活动目录 ladp -- Support for System.DirectoryServices for Windows
    运行在 Android 系统上的完整 Linux -- Termux
    Windows Python 版本切换工具 --- Switch Python Version Tool For Windows
    简单的NLog配置文件
    python之set基本使用
    复习PHP的数组
    php动态修改配置文件
    制作一个php万年历
    一个简单的选项卡
    python操作文件的笔记
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12374545.html
Copyright © 2011-2022 走看看