网站开发 教程,长沙经济技术开发区人才网,吉林住房和城乡建设厅网站,淄博网站制作高端形象牛客题霸 [三个数的最大乘积]C题解/答案
题目描述
给定一个无序数组#xff0c;包含正数、负数和0#xff0c;要求从中找出3个数的乘积#xff0c;使得乘积最大#xff0c;要求时间复杂度#xff1a;O(n)#xff0c;空间复杂度#xff1a;O(1)。
题解#xff1a;
有…牛客题霸 [三个数的最大乘积]C题解/答案
题目描述
给定一个无序数组包含正数、负数和0要求从中找出3个数的乘积使得乘积最大要求时间复杂度O(n)空间复杂度O(1)。
题解
有人说排完序直接取最大的三个不就完了吗 但是并不一定因为负负得正我们可以选两个负的可能他们的绝对值更大 所以就有两种情况一个是取最大的三个数还一个是取最大数再乘上最小的两个数最小的两个数有可能是负数 然后取最大值就行
代码
class Solution {
public:/*** 最大乘积* param A int整型一维数组 * param ALen int A数组长度* return long长整型*/long long solve(int* A, int ALen) {// write code heresort(A,AALen);long long a A[ALen-1]*A[ALen-2]*A[ALen-3];long long b A[ALen-1]*A[0]*A[1];return max(a,b);}
};