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]又是三个数组名,分别表示三个一维数组的首地址。

  • 相关阅读:
    非常适合新手的一个Python爬虫项目: 打造一个英文词汇量测试脚本!
    代码遇到异常怎么办?不要慌,来看看这个!
    老司机要开车了!用Selenium+PhantomJS来抓取煎蛋网妹子图
    Python基础之格式化输出函数format()功能详解
    Python基础之常用格式化输出字符详解
    新手学python,如何才能更快升职加薪,迎娶白富美,走上人生巅峰
    ASP.NET MVC学习笔记 第二天
    ASP.NET MVC学习笔记 第一天
    ActiveMQ相关:
    WPF中使用定时器 DispatcherTimer 做TCP连接中的心跳 HeartBeat
  • 原文地址:https://www.cnblogs.com/simplepaul/p/6882617.html
Copyright © 2011-2022 走看看