二维数组中的查找(剑指offer面试题3)
来源:互联网 发布:c语言getchar putchar 编辑:程序博客网 时间:2024/05/15 09:05
【题目】在一个二维数组中,每一行按照从左到右递增顺序排序,每一列按照从上到下递增的顺序排序。完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
如同上图中二维数组,如果在这个数组中寻找目标数7,找到则返回true,否则返回false。
【分析】选择中间的数字进行比较时,比如选9,9>7,所以目标位置存在于9的位置的左边或上边,如此比较,并不能快速筛选有效信息,故选择边缘角落值一一筛选,以右上角落9与7比较,9>7,故目标位置一定不在最后一列,筛除后,再看8,8>7,筛除第三列,再看2,2<7,筛除第一行,看4<7,筛除第二行,看7=7,返回找到目标值。
【算法实现】
#include<stdio.h>typedef int bool; #define true 1 #define false 0 bool Find(int* matrix, int rows, int columns, int number){ bool found = false; if(matrix != NULL && rows >0 && columns > 0) { int row = 0; int column = columns -1 ; while(row < rows && column >=0) { if(matrix[row*columns + column] == number) { found = true; break; } else if (matrix[row*columns + column]>number) --column; else ++row; } } return found;}int main(){ int data[4][4] = {1,2,8,9, 2,4,9,12 ,4,7,10,13,6,8,11,15}; int *p =data[0]; if( Find(p, 4, 4, 1)==true) printf("find it"); else printf("not find"); return 0;}
【代码分析】
代码中涉及到二维数组转换成一维指针的过程,二维数组虽然在写法上是二维的,但在内存存储时依然是依次排列,一行接着一行,可以用*p进行访问,但是在写法上应该注意,指针应该指向数组的首地址,而二维数组首地址data[0] , 将二维数组看成是n个一维数组组成的.
一维数组data[4]的首地址为data, *data = data[0] ;
二维数组data[4][4]的首地址是data[0], *data = data[0];
二维数组第i行首地址*(data+i) = data[0+i];
二维数组data[m][n]中任意元素在内存中存储的位置用指针寻找是p[i*n+j].
*data = data=data[0]=&data[0][0]
data[0]=*(data+0)
【注意】二维数组与指针之间的关系,c语言中没有自定义bool量,故需要自己定义
- 二维数组中的查找(剑指offer面试题3)
- 【剑指offer】面试题3:二维数组中的查找
- 【剑指offer】面试题3:二维数组中的查找
- 剑指Offer:面试题3 二维数组中的查找
- 《剑指Offer》面试题3:二维数组中的查找
- 剑指offer面试题3-二维数组中的查找
- 【剑指Offer学习】【面试题3 :二维数组中的查找】
- 【剑指offer】 面试题3: 二维数组中的查找
- 剑指Offer面试题3:二维数组中的查找
- 剑指Offer:面试题3 二维数组中的查找
- 剑指offer-面试题3:二维数组中的查找
- 剑指offer面试题3之二维数组中的查找
- 剑指offer面试题3—二维数组中的查找
- 剑指offer 面试题3 二维数组中的查找
- 剑指offer面试题3:二维数组中的查找
- 剑指offer面试题3:二维数组中的查找
- 剑指offer - 面试题3:二维数组中的查找
- 剑指Offer---面试题3:二维数组中的查找
- python学习相关资料
- UEditor配置:图片上传和文件上传独立使用方法,兼容最新版 UEditor 1.4.3
- 关于Ajax 问题
- hadoop的hdfs文件操作实现上传文件到hdfs
- Direct3D 可编程流水线 多重流和数据 共HLSL高级着色器语言
- 二维数组中的查找(剑指offer面试题3)
- android获取mac地址
- 关于动态链接学习中的小结
- POJ 1543 Perfect Cubes
- android activity启动,关闭的动画实现
- mysql性能优化(五) mysql中SELECT+UPDATE处理并发更新问题解决方案
- Android 通过httpclient请求web服务器,并解决用户登录session保持
- QT 快速入门(二)
- iOS uilabel添加文字颜色,中划线