zoukankan      html  css  js  c++  java
  • 二维数组中的查找问题--剑指offer面试题3

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

    // 二维数组中的查找
    #include <iostream>
    using namespace std;
    int SearchMatrix(int *arr, int key, int row, int col)
    {
        if (arr == NULL)
            return 0;
        int row_index,col_index,pivotkey;
    
        int y = sizeof(arr)/sizeof(int);   // for test
        cout << y <<endl;    //   y = 1
    
        row_index = 0;
        col_index = col - 1;
    
        while (row_index <= row - 1 && col_index >= 0)
        {
            pivotkey = *(arr + row_index * col + col_index);
            if (pivotkey == key)
                return 1;
            else if (pivotkey > key)
            {
                col_index --;
            }
            else
            {
                row_index ++;
            }
        }
        return 0;
    }
    int main()
    {
        int res, row = 0, col = 0;
        int arr[4][4] = {{1, 2, 8, 9},{2, 4, 9, 12}, {4, 7, 10, 13}, {6, 8, 11, 15}};
        int y = sizeof(arr)/sizeof(int);
        cout << y << endl;       // 输出为16
        row = (sizeof(arr)/sizeof(int)) / (sizeof(arr[0]) / sizeof(int));
        col = sizeof(arr[0])/sizeof(int);
        res = SearchMatrix((int *)arr, 120, row, col);
        if (res == 1)
            cout << "found it" <<endl;
        else
            cout << "not found it" <<endl;
        return 0;
    }

    在写的时候发现一个问题,就是二维数组作为参数传入函数时,会有多种方法

    第一种方式是直接传递二维数组,但是必须标明第二维的值,因为如果只是传递a[][],编译器无法分配这样的数组,所以要这样传int a[][4]

    第二种方法是传递指针数组方式,即int (*a)[4]  , 这句话声明了一个指针变量(即数组指针),这个指针指向由4个int组成的数组 ,是一个一级指针
    第三种是传递指针方法,即上边程序的方法。

    不管是哪一种方法,在写程序的实参时,都要注意要匹配,有时候要进行一些强制类型的转换。

    比如:

    int a[3][4];

    可以理解为a数组是三个元素组成的一维数组,这三个数组的名字分别为a[0], a[1], a[2],其中的每个元素又是由四个元素组成的一维数组。

    a是三个一维数组a[0], a[1], a[2]的首地址

    而a[0], a[1], a[2]又是三个数组名,分别表示三个一维数组的首地址。

  • 相关阅读:
    linux一些常用命令
    imageMagick
    nginx安装配置
    数据库操作(六)、Date函数
    数据库操作(五)、聚合函数,分组
    JQuery(一)
    数据库小结(二)
    数据库操作(四)、标量函数
    数据库操作(三)
    C#基础(六)
  • 原文地址:https://www.cnblogs.com/simplepaul/p/6882617.html
Copyright © 2011-2022 走看看