【LeetCodeの毎日の質問】——628. 3つの数値の最大積

[トピックカテゴリ] 1 つ

  • 分類する

2【問題難易度】

  • 単純

3 [トピック番号]

  • 628. 3 つの数字の最大の積

4 【タイトル説明】

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

5 【トピック例】

  • 例 1:

    • 入力: 数値 = [1,2,3]
    • 出力: 6
  • 例 2:

    • 入力: 数値 = [1,2,3,4]
    • 出力: 24
  • 例 3:

    • 入力: 数値 = [-1,-2,-3]
    • 出力: -6

6 [トピックプロンプト]

  • 3 < = 数値。長さ < = 1 0 4 3 <= nums.length <= 10^43<=数値_ _ _ _ _ _ _<=1 04
  • − 1000 < = nums [i] < = 1000 -1000 <= nums[i] <= 10001000<=数値[ i ] _ _ _<=1000

7つの【問題解決アイデア】

  • 状況別のディスカッション:
    • 配列はすべて正の数です。配列内の最後の 3 つの数値の積が最大になります。
    • 配列はすべて負です。配列内の最後の 3 つの数値の積が最大です。
    • 配列には正と負の数値があります。配列内の最初の 2 つの数値と最後の数値の積が最大になるか、最後の 3 つの数値の積が最大になります。
  • 要約すると、配列内の最後の 3 つの数値の積が最大であるか、配列内の最初の 2 つの数値と最後の数値の積が最大であるため、より大きい値を返すだけで済みます。
  • 最後に結果を返します

8【時間周波数】

  • 時間計算量: O ( nlogn ) O(nlogn)O ( nログn )nn _ _nは受信配列の長さです
  • 空間複雑度: O ( logn ) O(logn)O (ログン)nn _ _ _nは受信配列の長さです

9 [コード実装]

  1. Java言語バージョン
class Solution {
    
    
    public int maximumProduct(int[] nums) {
    
    
        Arrays.sort(nums);
        int len = nums.length;
        int maxOne = nums[len - 1];
        int maxTwo = nums[len - 2];
        int maxThree = nums[len - 3];
        int minOne = nums[0];
        int minTwo = nums[1];
        if(maxOne * maxTwo * maxThree > minOne * minTwo * maxOne){
    
    
            return maxOne * maxTwo * maxThree;
        }else{
    
    
            return minOne * minTwo * maxOne;
        }
    }
}
  1. C言語版
int cmp(const void *a, const void *b)
{
    
    
    return *(int*)a - *(int*)b;
}

int maximumProduct(int* nums, int numsSize)
{
    
    
    qsort(nums, numsSize, sizeof(int), cmp);
    return fmax(nums[0] * nums[1] * nums[numsSize - 1], nums[numsSize - 1] * nums[numsSize -2] * nums[numsSize - 3]);
}
  1. Python言語バージョン
class Solution:
    def maximumProduct(self, nums: List[int]) -> int:
        nums.sort()
        n = len(nums)
        return max(nums[0] * nums[1] * nums[n - 1], nums[n - 1] * nums[n - 2] * nums[n - 3])
  1. C++言語バージョン
class Solution {
    
    
public:
    int maximumProduct(vector<int>& nums) {
    
    
        sort(nums.begin(), nums.end());
        int n = nums.size();
        return max(nums[0] * nums[1] * nums[n - 1], nums[n - 1] * nums[n - 2] * nums[n - 3]);
    }
};

10【投稿結果】

  1. Java言語バージョン
    ここに画像の説明を挿入

  2. C言語版
    ここに画像の説明を挿入

  3. Python言語バージョン
    ここに画像の説明を挿入

  4. C++言語バージョン
    ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/IronmanJay/article/details/132288403