题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
调试结果
运行时间:12ms
占用内存:1504k:
知识点
知识点:二维数组(一位数组,多维数组)
参考 C++二维数组讲解、二维数组的声明和初始化
/*
百度有的就不哔哔了!简述二维数组的转置、相加、相乘基本运算!好像百度都有啊!!!!这里多的是注释解释吧!!!
*/
//二维数组定义:知道行列表示就行了;a[M][N],M行,N列表示。
//二维数组初始化:int a[m][n];
//二(N)维数组运算:二维数组(矩阵),当然矩阵的运算:转置、相加、相乘基本操作。
//矩阵转置—————————————————
//其中A, B是m*n矩阵:
void tramat(matrix A,matrix B)
{
int i,j;
for(i=0; i<m; i++)//每一行
for(j=0;j<n;j++)//每一列
B[j]=A[j];//A[j]表示每一列的元素,当循环每一行的每一列便遍历了整个二维数组。
}
//矩阵相加————————————————
//其中A,B,C是m*n矩阵:
void addmat(matrix C, matrix A, matrix B)
{
int i, j;
for(i=0; i<m; i++)
for(j=0;j<n;j++)
c[j] = A[j] + B[j];
}
//矩阵相乘————————————————
//其中A,B,C是m*n矩阵:
void multmat(matrix C, matrix A, matrix B)
{
int i, j;
for(i=0; i<m; i++)
for(j=0;j<n;j++)
for(k = 0;k<m;k++)
c[i][j] += A[i][k] * B[k][j];//A[I][K]:a行的每一个k列元素,B[i][k]:每一k列的i行元素——行列相乘
}
//数组间的转化 :2<—>N<—>1
//二维数组用途:
知识点:排序+查找
(个人理解:排序是所有元素的查找,查找是个别元素的排序;同样对数据集合中的元素进行以遍历为基础的操作。)
***********************************************排序 ************************************************
http://wenku.cyjzzd.com/a/137197##wk-more 常见10种排序 (常见的不到10种)
感谢博主的脑图(Xmind)有时间这几个排序C++实现以下!!应该没时间,直接看大佬博客吧!
———— 排序算法————
—— 比较类:
交互排序(冒泡排序、快速排序)
插入排序(简单插入排序、希尔排序)
选择排序(简单选择排序、堆排序)
归并排序(二路归并排序、多路归并排序)
——非比较类:
基数排序、计数排序、堆排序
这里会有排序代码的!!!
*********************************************查找 **********************************************
https://blog.csdn.net/deng_sai/article/details/77541214 常见7种查找方法
为什么那么多博客引用这个那?不废话!哔哔少!很干货,很全!
1、顺序查找
2、二分查找
3、插值查找
4、斐波那契查找
5、树表查找
6、分块查找
7、哈希查找
这里会有查找代码的
C++代码
//为啥没用什么高大上的方法? 行首元素和行内元素已经有序了,对行首元素使用一种排序?在对行内使用一种? 心累啊!鬼知道他有几个元素啊!
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
//定义行列下标
int m = array.size();
int n = array[0].size();
//遍历数组
for(int i = 0;i<m;)
{
//以行为单位寻找target
if(target>=array[i][0])//行首元素
{
for(int j = 0; j<n;)
{
if(target == array[i][j])
{
return true;
}
j++;
}
}
i++;
}
return false;
}
};
总结
参考 如何写博客