给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 1:

输入: [1,2,3]
输出: 6
示例 2:

输入: [1,2,3,4]
输出: 24
注意:

给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
链接:https://leetcode-cn.com/problems/maximum-product-of-three-numbers
最开始用的是for循环写的

int maximumProduct(int* nums, int numsSize)
{
    int i,j,t,max,a,b;
    for(i=0;ib?a:b;
      return max;
}

错误的原因是时间复杂度太长
后来尝试直接找最大、最小的方法

int maximumProduct(int* nums, int numsSize)
{
    int a,b,max;
    int max1=nums[0],max2=nums[0],max3=nums[0];
    int min1=nums[0],min2=nums[0];
    for(int i=1;inums[i])
            min1=nums[i];
     for(int i=1;inums[i]&&nums[i]!=min1)
            min2=nums[i];
     a=nums[numsSize-1]*nums[numsSize-2]*nums[0];
      b=nums[0]*nums[1]*nums[2];
      max=a>b?a:b;
      return max;
}

这次仍旧错误,原因是最大、最小的值错误。
又尝试了三个、两个一起找的方法

int maximumProduct(int* nums, int numsSize){
    int i,a,b,max1,max2,max3,min1,min2;
    max1=-1001;
    max2=-1001;
    max3=-1001;
    min1=1001;
    min2=1001;
    for (i=0;i max1)
        {
            max3 = max2;
            max2 = max1;
            max1 = nums[i];
        } 
        else if (nums[i] > max2) 
        {
            max3 = max2;
            max2 = nums[i];
        } 
        else if (nums[i]> max3)
        {
            max3 = nums[i];
        }

        if (nums[i]< min1)
        {
            min2 = min1;
            min1 = nums[i];
        } 
        else if (nums[i] < min2)
        {
            min2 = nums[i];    
        }            
    }
	a=max1*max2*max3;
	b=min1*min2*max1;
	return a>b? a:b;
}

终于对了!!!
555555,算法好难,背好疼,想哭…

你可能感兴趣的:(给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。)