算法练习题34——无序数组,求三个数的最大积

分析: 要考虑正负情况,真正影响结果的是五个数字,分别是最大的三个数,和最小的两个数。最大值应该为三个最大数字的积,或者最大数字与最小两个数字的积。这道题,没有找到用来测试的数据,我并不清楚答案对不对,欢迎大家指正。
代码:

int main(int argc, char* argv[])
{
	// 测试数据
     vector nums{-5,-6,-7,0};
     
     // 保存三个最大数和两个最小数,容器设置的大一点是为了方便排序
     vector numsMax(4,INT8_MIN);
     vector numsMin(3,INT8_MAX);

	// 找出三个最大数字与两个最小数字
     for(int i = 0;i < nums.size();++i){
         numsMax[0] = nums[i];
         sort(numsMax.begin(),numsMax.end());
         numsMin[2] = nums[i];
         sort(numsMin.begin(),numsMin.end());
     }

	// 分别计算三个最大数字的积,与一个最大数字与两个最小数字的积
     int res1 = numsMax[1] * numsMax[2] * numsMax[3];
     int res2 = numsMax[3] * numsMin[0] * numsMin[1];

	// 哪个大,哪个就是正确答案
     cout << max(res1,res2) << endl;
     return 0;
}

你可能感兴趣的:(算法练习题,算法)