假设法求最大值和数组的优点

Posted yfish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了假设法求最大值和数组的优点相关的知识,希望对你有一定的参考价值。

给定一个数组,求数组中的最大值。

用假设法可解,思路是,把数组中随便一个元素设置为最大值,然后让其它元素和它比,如果比当前最大值大,那么最大值就被设置为这个元素,这个过程有点类似打擂台,共有N个人打擂台,其中一个人说,我是最厉害的,然后后面一个人把他打败了,它就编程最大的了,前面就被淘汰了,擂台上始终是当前最厉害的,那么最后留在擂台上的就是最厉害的。

想出假设法的人真的很聪明啊,我怎么想不到呢?

 

假设是4个整型变量,那么有以下代码

int a,b,c,d

int max=a;

if(b>=max)

max=b;

if(c>=max)

max=c;

if(d>=max)

max=d;

 

发现没有,这三段if代码很相似,但似乎不会有简便的办法了。

 

如果把这四个变量放到数组中,那么我们可能会写出这样的代码:

int main(void)
{
	int num[] = { 35,34,67,67};
	int max = num[3];
	
	
		if (num[0] >= max)
		{
			max = num[0];
		}
		if (num[1] >= max)
		{
			max = num[1];
		}
		if (num[2] >= max)
		{
			max = num[2];
		}
		if (num[3] >= max)
		{
			max = num[3];
		}

	printf("max=%d",max);
	return 1;
}

  

可以发现几段if代码就是数组索引不一样,其它地方都一样,如下图:

技术分享图片

 

数组索引是一个常数,我们可以用一个变量i来代替它,然后让i的值从0开始,每次加1这样变化,for循环正是有这样的功能。

于是代码可以被优化成下面这样。

 

 

int main(void)
{
	int num[] = { 35,34,67,67};
	int max = num[3];
	
	for (int i = 0; i <= 3; i++)
	{
		if (num[i] >= max)
		{
			max = num[i];
		}
	}
		
	printf("max=%d",max);
	return 1;
}

  

数组从某些角度讲有优化代码的功能。

 

以上是关于假设法求最大值和数组的优点的主要内容,如果未能解决你的问题,请参考以下文章

获取数组最大值

求数组中连续元素的最大乘积

求最大子数组的思想和代码

把数组中的数拼接起来,求最大值

JAVA编程求数组最大值和最小值

假设有一数值数组,在不影响原数组的情况下,获取数组的最大值和最小值