试题1:最大乘积

试题描述:
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
解题思路:
要想乘积最大,只有两种情况,一是最大的三个数相乘,二是最大的数和最小的两个数相乘。因此先对数组中的元素进行排序,然后再计算这两种情况的乘积进行比较,返回最大值。

//代码如下
#include 
#include 

long long maxmulti(long *p, int n)
{
    int i = 0, j=0;
    //int max1, max2;
    int tmp = 0;
    //max1 = p[0];
    for(i=0;i maxmulti2)
    {
        return maxmulti1;
    }
    else
    {
        return maxmulti2;
    }
    //return maxmulti3;
    
}
int main()
{
    int n;
    //printf("Please enter the length of the array: ");
    scanf("%d", &n);
    //int n;
    long a[n];
    //printf("please enter the number of the array:");
    for(int i=0; i

你可能感兴趣的:(试题1:最大乘积)