小米笔试:最大子数组乘积

网上看到的题目,个人认为准确翻译应当是最大子数组乘积,而不是最大子序列乘积。

下面这个链接上有非常好的介绍。

http://www.math.colostate.edu/~hulpke/lectures/cs3001/mul2.pdf

值得注意的是maxneg初始化为0,而不是别的负数,这样才不会影响maxval的判断。

#include 
using namespace std;

float maxsubseqproduct(float arr[], int len)
{
	float maxval = 0, maxpos = 1, maxneg = 0;
	for(int i = 0; i < len; ++i)
	{
		if(arr[i] > 0)
		{
			maxpos *= arr[i];
			maxneg *= arr[i];
		}
		else if(arr[i] < 0)
		{
			float tmp = maxneg;
			maxneg = maxpos * arr[i];
			maxpos = tmp * arr[i];
		}
		else//arr[i] == 0
		{
			maxpos = 1;
			maxneg = 0;
		}
		if(maxpos < 1)
			maxpos = 1;
		if(maxpos > maxval)
			maxval = maxpos;
	}
	return maxval;
}

int main()
{
	cout<<"hello world."<


你可能感兴趣的:(小米笔试:最大子数组乘积)