剑指offer3:二维数组中的查

内容:

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

解题思路:

首先选取数组中右上角的数字,如果该数字等于要查找的数字,则查找结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行。也就是说,如果要查找的数字不在数组的右上角,则每次都在数组中剔除一行或者一列,这样缩小范围查找。

代码实现:

#include<stdio.h>
#include<Windows.h>
#define ROW 4
#define COL 4
#include<assert.h>
int is_find(int a[][COL],int key)
{
	assert(a);
	int row = 0;
	int col = COL - 1;
	while ((row <= ROW) && (col >= 0))
	{
		if (a[row][col] > key)
			col--;
		else if (a[row][col] < key)
			row++;
		else
			return 1;
	}
	return 0;
}
int main(){
	int a[ROW][COL] = {
		{ 1, 2, 3, 4 },
		{ 5, 6, 7, 8 },
		{ 9, 10, 11, 12 },
          {13,14,15,16},
	};
	int key = 7;
	int ret = is_find(a, key);
	printf("%d\n", ret);
	system("pause");
	return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_41889292/article/details/80474133