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

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

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

第一种方式是直接传递二维数组,但是必须标明第二维的值,因为如果只是传递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]又是三个数组名,分别表示三个一维数组的首地址。

二维数组中的查找问题--剑指offer面试题3的更多相关文章

  1. 二维数组中的查找(剑指offer_4)

    给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序.给定一个数,判断这个数是否在该二维数组中. Consider the following matrix: [ [1, 4, 7, 11 ...

  2. 《剑指Offer》面试题-二维数组中的查找

    题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7318 解决:1418 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到 ...

  3. 《剑指offer》 二维数组中的查找

    本题目是<剑指offer>中的题目 二维数组中的查找 题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  4. 剑指offer【01】- 二维数组中的查找(Java)

    在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有. 而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了.剑指offer应对面试中的 ...

  5. 【Java】 剑指offer(3) 二维数组中的查找

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上 ...

  6. [剑指Offer]5.二维数组中的查找

    题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...

  7. 剑指Offer - 九度1384 - 二维数组中的查找

    剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  8. 剑指offer:二维数组中的查找

    目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...

  9. 【剑指Offer面试题】九度OJ1384:二维数组中的查找

    下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> ...

随机推荐

  1. Unity与安卓开发的一些路径知识

    APK安装之后找不到路径 公司的测试机(安卓)基本都是不带SD卡的. APK在安卓手机上安装之后,使用手机助手类的软件打开文件管理,打开 内置SDK卡/Android/data/ 在这个目录下却发现 ...

  2. python——虚拟环境之virtualenvwrapper-win(windows10,64位)

    1 问题描述 当M个项目需要N个版本的python环境配置时(M>N)时,我们没有必要对每个项目都创建一个虚拟环境,只需要创建N个虚拟环境即可.这样节省了大量存储空间(特别是当M远大于N时).但 ...

  3. LeetCode算法题-Single Number(Java实现)

    这是悦乐书的第175次更新,第177篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第34题(顺位题号是136).给定一个非空的整数数组,除了一个元素外,每个元素都会出现两 ...

  4. C语言 大小写字母转换

    //凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 方法1: #include<stdio.h> #include<stdlib.h> ...

  5. Java同步(Synchronization)

    前言 线程间的通信主要通过共享对字段的访问和对象引用字段的引用,可能会产生两种错误,线程干扰和内存一致性错误.Java的同步就是防止这些错误,但当多个线程访问同一资源会导致线程执行缓慢,甚至暂停执行. ...

  6. fg和bg前后台调度命令

    Linux下的fg和bg命令是进程的前后台调度命令,即将指定号码(非进程号)的命令进程放到前台或后台运行.比如一个需要长时间运行的命令,我们就希望把它放入后台,这样就不会阻塞当前的操作:而一些服务型的 ...

  7. Myeclipse2017C版本破解

    原文地址: https://blog.csdn.net/qq_33945246/article/details/79589152

  8. linux学习笔记整理(三)

    第四章 文件的基本管理和XFS文件系统备份恢复本节所讲内容:4.1 Linux系统目录结构和相对/绝对路径.4.2 创建/复制/删除文件,rm -rf / 意外事故4.3 查看文件内容的命令4.4 实 ...

  9. UVA1347-Tour(动态规划基础)

    Problem UVA1347-Tour Accept: 667  Submit: 3866Time Limit: 3000 mSec Problem Description John Doe, a ...

  10. UVA1616-Caravan Robbers(枚举)

    Problem UVA1616-Caravan Robbers Accept: 160  Submit: 1156Time Limit: 3000 mSec Problem Description O ...