基础算法(1):最值(最大值,最小值,同时求最大值和最小值)

一.寻找最小值和最大值。

        方法: 遍历一遍元素集合,获得最值。

                 最小值: 

void findMin(const vector<int> &num, int &min)
{
	min = num[0];
	vector<int>::const_iterator iter;
	/*常量引用使用 const_iterator; 非常量使用 iterator*/
	for (iter = num.begin(); iter != num.end(); ++iter)
	{
		if (*iter < min)
			min = *iter;
	}
}

                  最大值:             

void findMax(const vector<int> &num, int &max)
{
	max = num[0];
	vector<int>::const_iterator iter;
	/*常量引用使用 const_iterator; 非常量使用 iterator*/
	for (iter = num.begin() + 1; iter != num.end(); ++iter)
	{
		if (*iter > max)
			max = *iter;
	}
}

二.同时寻找最小值和最大值。

     方法:

            1.一般方法, 遍历元素分别与最小值和最大值比较。共需要比较2n-2次。

            2.优化方法, 每次读入两个元素,先比较这两个元素的大小,然后把大的与最大值比较,

                               小的与最小值比较。

void findMinAndMax(const vector<int> &num, int &min, int &max)
{
	if (num.size() == 1)
	{
		max = min = num[0];
	}
	else
	{
		num[0] >= num[1] ? max = num[0], min = num[1] :
			           max = num[1], min = num[0];
		vector<int>::const_iterator iter;
		for (iter = num.begin() + 1; iter + 1 != num.end(); ++iter)
		{
			if (*iter >= *(iter + 1))
			{
				if (*iter > max) max = *iter;
				if (*(iter + 1) < min) min = *(iter + 1);
			}
			else
			{
				if (*(iter + 1) > max) max = *(iter + 1);
				if (*iter < min) min = *iter;
			}
		}
	}
}


     


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值