【LeetCode】628. 三個數的最大乘積
阿新 • • 發佈:2021-01-21
技術標籤:LeetCode
題目連結:https://leetcode-cn.com/problems/maximum-product-of-three-numbers/
難度:簡單
題目描述
給定一個整型陣列,在陣列中找出由三個陣列成的最大乘積,並輸出這個乘積。
測試資料
示例 1:
輸入: [1,2,3]
輸出: 6
示例 2:輸入: [1,2,3,4]
輸出: 24
注意:給定的整型陣列長度範圍是[3,104],陣列中所有的元素範圍是[-1000, 1000]。
輸入的陣列中任意三個數的乘積不會超出32位有符號整數的範圍。
題解
一看到“最大乘積”,第一反應就是先排序,然後最大的三個數乘積就是所求。但是,還要考慮負數的情況,比如[-6,-4,-3,-2,-1,2],這個序列的最大乘積=(-6)*(-4)* 2= 48。
方法一:先排序,然後返回”最大三個數的乘積“和“最小兩個負數及最大數的乘積”,兩者的較大者。
時間複雜度:
空間複雜度:
方法二:設定5個變數,分別記錄最大的三個數 和 最小的兩個數。
時間複雜度:
空間複雜度:
程式碼
// 方法一 class Solution { public int maximumProduct(int[] nums) { Arrays.sort(nums); int n = nums.length; return Math.max(nums[0]*nums[1]*nums[n-1], nums[n-1]*nums[n-2]*nums[n-3]); } }
// 方法二 class Solution { public int maximumProduct(int[] nums) { int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE; int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE, max3 = Integer.MIN_VALUE; for (int n : nums){ if (n > max1){ max3 = max2; max2 = max1; max1 = n; } else if (n > max2){ max3 = max2; max2 = n; } else if (n > max3){ max3 = n; } if (n < min1){ min2 = min1; min1 = n; } else if (n < min2){ min2 = n; } } return Math.max(max1*max2*max3, min1*min2*max1); } }