栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

杨氏矩阵(C++实现)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

杨氏矩阵(C++实现)

文章目录
  • 一、题目叙述及思路
    • 1. 题目叙述
    • 2. 解题思路
  • 二、代码


一、题目叙述及思路 1. 题目叙述

杨氏矩阵:

有一个二维数组,数组的每行从左到右是递增的,每列从上到下是递增的,在这样的数组中查找一个数字是否存在。

例如存在一个二维数组,每行每列都是递增的,查找一个数字是否存在:

1 2 3
4 5 6
7 8 9

2. 解题思路

假如我们要找的目标数target为5,有两种方法:

1.直接对该二维数组进行遍历,但该种方法时间复杂度为O(N^2),在此不考虑。

2.我们可以找到行列交界处,比如[0][2],即数字3这个位置,通过观察,我们可以发现,该数字是所处行中最大的,所处列中最小的,可以用目标数target和该交界处数字进行比较,如果target大于该数,则表示target比这行最大的数还要大,所以一定不在这一行,舍弃该行;如果target小于该数,则表示target比这列最小的数还要小,所以一定不在这一列,舍弃该列。以此类推,找到返回true,找不到返回false。


二、代码
class Solution {
public:
	bool Find(int target, vector> array)
	{
		int i = 0;
		int j = array[0].size() - 1;

		while (i < array.size() && j >= 0)
		{
			if (target < array[i][j]) //array[i][j]一定是当前行最大、当前列最小的数
			{
				//target < array[i][j],排除当前列
				j--;
			}
			else if (target > array[i][j])
			{
				//target > array[i][j],排除当前行
				i++;
			}
			else
			{
				return true;
			}
		}
		return false;
	}
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004504.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号