IMWeb提升营Day1 | 训练题1:有序二维数组的查找

来源:互联网 发布:联通网络解锁助手2017 编辑:程序博客网 时间:2024/06/07 01:10

题目描述:

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路一:遍历

/*  * 思路一:每一行都进行二分法查找 * 运行时间:0ms * 占用内存:8552k */class Solution {public:    bool Find(int target, vector<vector<int> > array) {        int top = 0, bottom = array.size();        int mid;        for(int i = 0; i < bottom; i++){            int left = 0, right = array[i].size()-1;            while(left <= right){               mid = (left+right)/2;               if(target > array[i][mid]){                   left = mid+1;               }else if(target < array[i][mid]){                   right = mid-1;               }else{                   return true;               }            }        }        return false;    }};

这里写图片描述

思路二:根据规律从左下角或者右上角开始查找

/*  * 思路二:从左下角开始查找 * 运行时间:10ms * 占用内存:8552k */class Solution {public:    bool Find(int target, vector<vector<int> > array) {        int top = 0, bottom = array.size()-1;        int left = 0, right = array[0].size()-1;        int xpos = left, ypos = bottom;        while((xpos <= right)&& (ypos >= top)){            if(target > array[xpos][ypos]){                //大于就往右走                xpos++;            }else if(target < array[xpos][ypos]){                //小于就往上走                ypos--;            }else{                return true;            }        }        return false;    }};

这里写图片描述

原创粉丝点击