给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。
示例 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,算法好难,背好疼,想哭…