学校に戻る:質問10-628。3つの数字の最大積

628.3つの数値の最大積

整数の配列numsを指定し、配列内の3つの数値の最大の積を見つけて、この積を出力します。

示例 1:

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

输入:nums = [1,2,3,4]
输出:24
示例 3:

输入:nums = [-1,-2,-3]
输出:-6
 

提示:

3 <= nums.length <= 104
-1000 <= nums[i] <= 1000

回答:

方法1:並べ替え

問題を分析することにより、ソート後に配列がすべて負またはすべて正の場合、最後の3つの数値の積が返されることがわかります。負と正がある場合、3つの数値の最大の積、または最大の数値と最小の2つの数値の積のいずれかが返されることがわかるため、比較を個別に計算できます。
配列の最小長は3であるため、二重カウントは行われないことに注意してください。
そして、最小の2つの数値がすべて負ではない場合、どうすればよいか考えるかもしれません。
実際、これは非常に明白です。配列に正と負がある場合、最大の積は2つの可能性があることであり、負の数が1つしかない場合は、積が0未満である必要があることがわかったため、直接出力します。スキームの種類を比較することによる別の。

コード:

int cmp(int*x,int*y)
{
    
    
    return *x>*y;
}
int maximumProduct(int* nums, int numsSize){
    
    
    qsort(nums,numsSize,sizeof(int),cmp);
    int max = 0;
    if(nums[numsSize-1]*nums[numsSize-2]*nums[numsSize-3]>nums[numsSize-1]*nums[0]*nums[1])
    {
    
    
        max = nums[numsSize-1]*nums[numsSize-2]*nums[numsSize-3];
    }
    else
    {
    
    
        max = nums[numsSize-1]*nums[0]*nums[1];
    }
    return max;
}

方法2:最大の3つの数と最小の2つの数を線形に見つける

おすすめ

転載: blog.csdn.net/xiangguang_fight/article/details/114751781