• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

行元素从小到大递增,列元素从小到大递增的数组查找算法

php 搞代码 4年前 (2022-01-23) 26次浏览 已收录 0个评论

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

考点:这道题主要是要利用好所给的两个条件,行递增和列递增,将肯定不合适的数据排除在外,将要遍历的数据尽可能的减少。

数组例子如下:

2本文来源gao*daima.com搞@代#码&网6

搞gaodaima代码
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15

解决一个复杂的问题时,最有效的办法就是从具体的问题入手分析。

通过观察可知,

1.列最开头如果大于要查找的数,那么要查找的数不可能在那一列,可以直接剪枝掉那一列;

结果如下:

1 2
2 4
4 7
6 8

2.通过剪枝列之后,可以发现,行最末尾的数如果小于要查找的数,那么要查找的数肯定也不在那一行;

结果如下:

4 7
6 8

3.这样数据就剪成最少的可能的数量,然后再对这些数据进行遍历查找,就可以了。

代码如下:

<?php/*$data  数组$number 查找的数$rows 数组的行数$columns 数组的列数*/function inArray($data,$number,$rows,$columns){	$row=0;	$column=$columns-1;	$first=true;	while($row=0)	{		if($data[$row][$column]>$number&&$first)		{			$column--;			//echo $column.',';		}		if($data[$row][$column]$number&&!$first)		{			break;		}	}	for($i=$row;$i<$rows;$i++)	{		for($j=0;$j<$column;$j++)		{			if($data[$i][$j]==$number)			{				return true;			}		}	}	return false;}$a=array(array(1,2,8,9),array(2,4,9,12),array(4,7,10,13),array(6,8,11,15));var_dump(inArray($a,7,4,4));var_dump(inArray($a,101,4,4));

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了行元素从小到大递增,列元素从小到大递增的数组查找算法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:行元素从小到大递增,列元素从小到大递增的数组查找算法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址