面试题3:二维数组的查找

题目:
https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

Code

#include 
using namespace std;
#define INT_MAX 65535

#include 
class Solution {
public:
    bool Find(int target, vector > array) {
        bool found = false;
        if(!array.empty()){
            int rows = array.size();
            int columns = array[0].size();
            int row = 0 ;
            int column = columns - 1;
            while(row < rows && column >=0){
                if(array[row][column] == target){
                    found = true;
                    break;
                }else if( array[row][column] > target )
                    --column;
                else
                    ++row;
            }
        }
        return found;
    }
};
int main()
{
    Solution su ;
    vector> a = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
    bool rt = su.Find(16,a);
    cout<

心得

一般情况下,拿到这个题,就会从左上进行比较分析。但是从左上角比较,每次不能够完全排除行或者列。
但是如果从右上角或者左下角进行比较分析,就能一次排除一个列,或者一个行。
往往困于惯性思维,不能从别的角度进行分析。
code中就是,从右上角进行比较,详细解析可以看剑指offer,上面分析非常好。

你可能感兴趣的:(面试题3:二维数组的查找)