記事ディレクトリ
[トピックカテゴリ] 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] <= 1000− 1000<=数値[ 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 [コード実装]
- 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;
}
}
}
- 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]);
}
- 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])
- 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【投稿結果】
-
Java言語バージョン
-
C言語版
-
Python言語バージョン
-
C++言語バージョン