前言
老样子,一定要花时间刷题!!!
一. 题目描述
二、题解思路
从左到右增加,从上到下增加,那么第一行的最右边那个值为第一行的最大值,是最后一列的最小值,从这个数开始向下找(向最后一列向下找),要是要找的值大于目前所在的下标对应的值上,说明这一行的数都小于目标值,因为最后一列在那一行中是最大的嘛,最大的都小于目标值,那么一行的数也就小于目标值了;然后向下找嘛,要是找到比目标值大的数就停下来,开始向左走比较,要是找到了就找到了,要是走到那一行的最左边还没有找到,那么就数组中没有目标值;要是向下找的过程中找到了,就找到了,要是一直向下找到最下面的数了,也就是最右边最下边的数还是小于,那么就找不到了嘛;
还有一个方法是从最左边最下面的数也就是左下角的数开始找,思路和上面是一样的;但是最上面和最右边最下边是找的效率是非常低的;
三. 代码实现
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param target int整型
* @param array int整型二维数组
* @param arrayRowLen int array数组行数
* @param arrayColLen int* array数组列数
* @return bool布尔型
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
bool Find(int target, int** array, int arrayRowLen, int* arrayColLen ) {
// write code here
int x=0,y=*arrayColLen-1;
while(x<arrayRowLen&&y>=0){
if(array[x][y]>target)
--y;
else if(array[x][y]<target)
++x;
else
return true;
}
return false;
}
总结
一定要多刷题啊!!!