寻找N个数组中的第二大数

题目很简单,不做说明:

#include <iostream>

using namespace std;

int array[] = {1, 10, 8, 7, 6, 9, 2, 3, 4, 5};
const int size = sizeof array / sizeof *array;

bool g_Error = false;

int findSecondMax(int *array, int size)
{
	if (array == NULL || size < 0)
	{
		g_Error = true;
		return -1;
	}

	int max1 = 1 << 31;
	int max2 = 1 << 31;
	for (int i = 0; i < size; i++)
	{
		if (array[i] > max1)
		{
			max2 = (max2 > max1) ? max2 : max1;
			max1 = array[i];
		}
		else
		{
			max2 = (max2 > array[i]) ? max2 : array[i];
		}
	}

	return max2;
}

void main()
{
	int result = findSecondMax(array, size);
	if (g_Error == true)
	{
		cout << "wrong input" << endl;
	}
	else
	{
		cout << "second max: " << result << endl;
	}
}

题目虽然简单,但是有一点得要和面试官沟通,那就是当所有的数字相等的时候,第二大的数取什么,具体可以分为下面两种情形:

1. 只有一个数字

2. 两个或多个数字相等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值