您的位置:首页 > Web前端

剑指offer:二维数组中的查找 代码实现

2015-09-05 15:55 417 查看
题目描述

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

[code]#include <stdio.h>
#include <iostream>
#include <vector>

using namespace std;
class Solution {
public:
    bool Find(vector<vector<int> > array,int target) {
        int rows = 0, columns = 0;
        int pos_x = 0, pos_y = 0;

        /* 得到行数 */
        rows = array.size();
        if(rows == 0)
        {
            return false;
        }

        /* 得到列数 */
        columns = array[0].size();

        /* 初始化开始搜寻的位置,从左上角开始*/
        pos_x = columns-1;
        pos_y = 0;

        while(1)
        {
            if(pos_x < 0 || pos_y >= rows)
            {
                return false;
            }

            if(array[pos_x][pos_y] == target)
            {
                return true;
            }
            else if(array[pos_x][pos_y] > target)
            {

                pos_x--;
            }
            else if(array[pos_x][pos_y] < target)
            {
                pos_y++;
            }
        }
        return true;
    }
};

int main()
{

    vector<int> vec(4);
    vector<vector<int> > v;

    Solution s;
    int i = 0, j = 0;

    /* 初始化二维数组 */
    for(i = 0; i < 4; i++)
    {
        v.push_back(vec);
    }

    /* 赋初值 */
    for(i = 0; i < 4; i++)
    {
        for(j = 0; j < 4; j++)
        {
            v[i][j] = i*4+j +1;
        }
    }

    if(s.Find(v,67) == true)
    {
        cout << "true" << endl;
    }
    else
    {
        cout << "false" << endl;
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: