试题1:最大乘积

2019-07-07  本文已影响0人  PersisThd

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

//代码如下
#include <stdio.h>
#include <math.h>

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<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(p[j]<p[j+1])
            {
                tmp = p[j];
                p[j] = p[j+1];
                p[j+1] = tmp;
            }
        }
    }
    
    long long maxmulti1 = p[0] * p[1] * p[2];
    long long maxmulti2 = p[0] * p[n-1] * p[n-2];
    if(maxmulti1 > 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<n; ++i)
    {
        scanf("%ld", &a[i]);
    }
    long long max3 = maxmulti(a, n);
    printf("%lld\n", max3);
    
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读