zoukankan      html  css  js  c++  java
  • {面试题3: 二维数组中的查找 }

    From 剑指Offer 何海涛 著

    // 从右上角开始查找
    bool find(const int *matrix, int rows, int columns, int value) {
        if(matrix == NULL || rows <= 0 || columns <= 0 ||  value < *matrix || *(matrix+rows*columns-1) < value) {
            return false;
        }
        int row = 0;
        int column = columns-1;
        while(row < rows && column >= 0) {
            int curr = *(matrix+row*columns+column);
            if(curr == value) {
                return true;
            }
            if(curr < value) {
                row++;
            } else {
                column--;
            }
        }
        
        return false;
    }
    // 从左下角开始查找
    bool
    find(const int *matrix, int rows, int columns, int value) { bool found = false; if(matrix != NULL && rows > 0 && columns > 0 && *matrix <= value && value <= *(matrix+rows*columns-1)) { int row = rows-1; int column = 0; while(row >=0 && column < columns) { int curr = *(matrix+row*columns+column); if(curr == value) { found = true; break; } if(curr < value) { column++; } else { row--; } } } return found; }

    测试集:

    void test(const int *matrix, int rows, int columns, int value, bool expected) {
        std::cout << std::boolalpha << (find(matrix, rows, columns, value) == expected) << std::endl;
    }
    
    int main(int argc, char* argv[]) {
        //  1   2   8   9
        //  2   4   9   12
        //  4   7   10  13
        //  6   8   11  15
        int matrix[][4] = {{1, 2, 8, 9}, {2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        
        test(NULL,    4, 4, 7, false);
        test(*matrix, 0, 4, 7, false);
        test(*matrix, 2, 4, 7, false);
        
        test(*matrix, 4, 4, 7, true);
        test(*matrix, 4, 4, 5, false);
        test(*matrix, 4, 4, 1, true);
        test(*matrix, 4, 4, 15, true);
        test(*matrix, 4, 4, 0, false);
        test(*matrix, 4, 4, 16, false);
        
        return 0;
    }

    注意: 列数必须是原矩阵的列数, 否则将破坏原矩阵中元素出现的规律: 同一行上元素呈递增趋势; 同一列上元素呈递增趋势!

  • 相关阅读:
    Sublime Text 3 3126 注册码
    修改bootstrap 的全局样式,bootstrap 3.0 是由html5和CSS 3组成的
    mysql-sql高级应用
    MySQL 主键冲突,无法插入数据
    jquery加载页面的方法(页面加载完成就执行)
    Jquery怎么获取select选中项 自定义属性的值
    使用Yii2中dropdownlist实现地区三级联动的例子
    Yii2中省市三级联动(栏目联动)
    [HNOI2009] 梦幻布丁
    [CJOJ2410]数列操作d
  • 原文地址:https://www.cnblogs.com/long3216/p/4439031.html
Copyright © 2011-2022 走看看