剑指offer---杨氏矩阵的查找

杨氏矩阵:就是指一个矩阵中每一行从左向右递增,每一列从上向下递增的矩阵。杨氏矩阵的查找,就是在矩阵中查找给定元素是否存在。矩阵可以用二维数组表示。![实现过程的图解](https://img-blog.csdn.net/20160513110447486)当然我们以左下角为起点也是可以~~(下边代码有给出,可以自己根据我分析右上角是起点的过程来分析)


下边给出代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//右上角是起点
int yang_search(int a[][3], int rows, int cols, int key)
{
	int row = 0;
	int col = cols - 1;
	while (row >= 0 && col >= 0)
	{
		if (a[row][col] == key)
			return 1;
		else if (a[row][col] < key)
			row++;
		else
			col--;
	}
	return 0;
}
//左下角是起点
int yang_search(int a[][3], int rows, int cols, int key)
{
	int row = rows-1;
	int col = 0;
	while (row >= 0 && col >= 0)
	{
		if (a[row][col] == key)
			return 1;
		else if (a[row][col] < key)
			col++;
		else
			row--;
	}
	return 0;
}
int main()
{
	int a[][3] = {1,2,3,2,3,4,3,4,5};
	int ret = yang_search(a,3,3,9);
	if (ret == 1)
		printf("查找到了");
	else
		printf("没有查找到");
	system("pause");
	return 0;
}


`注意:函数的参数:二维数组的传参,还要传数组的行数和列数。我们查找时,就是减少行或列来缩小查找范围,导致时间复杂度小于O(n)。如果你以左上角或右下角为起点,就起不到缩小查找范围的作用。感兴趣的可以自己试着分析一下~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值