Leetcode刷題628. 三個數的最大乘積
給定一個整型陣列,在陣列中找出由三個陣列成的最大乘積,並輸出這個乘積。
示例 1:
輸入: [1,2,3]
輸出: 6
示例 2:
輸入: [1,2,3,4]
輸出: 24
注意:
給定的整型陣列長度範圍是[3,104],陣列中所有的元素範圍是[-1000, 1000]。
輸入的陣列中任意三個數的乘積不會超出32位有符號整數的範圍。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/maximum-product-of-three-numbers
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
class Solution {
public int maximumProduct(int[] nums) {
// return maximumProductI(nums);
return maximumProductII(nums);
}
//方法一:排序
//求陣列最後三個元素的乘積
//求前兩個元素和最後一個元素的乘積
//比較,得出最大值
//時間複雜度O(NlogN),空間複雜度O(logN)
private int maximumProductI(int[] nums) {
Arrays.sort(nums);
int len = nums.length;
return Math.max(nums[0] * nums[1] * nums[len - 1], nums[len - 1] * nums[len - 2] * nums[len - 3]);
}
//方法二:遍歷
//當陣列有序後,最大值為max(nums[0]*nums[1]*nums[len-1],nums[len-1]*nums[len-2]*nums[len-3])
//所以遍歷陣列,取出上面5個變數即可
//時間複雜度O(n),空間複雜度O(1)
private int maximumProductII(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 <= min2) {
if (n <= min1) {
min2 = min1;
min1 = n;
} else {
min2 = n;
}
}
if (n >= max3) {
if (n >= max2) {
if (n >= max1) {
max3 = max2;
max2 = max1;
max1 = n;
} else {
max3 = max2;
max2 = n;
}
} else {
max3 = n;
}
}
}
return Math.max(min1 * min2 * max1, max1 * max2 * max3);
}
}
相關文章
- LeetCode每日一題: 三個數的最大乘積(No.628)LeetCode每日一題
- 三個數的最大乘積
- leetcode-陣列中兩元素的最大乘積(Java)LeetCode陣列Java
- 【Leetcode刷題篇】leetcode812 最大三角形面積LeetCode
- 【Leetcode刷題篇】leetcode152 乘積最大陣列LeetCode陣列
- Leetcode刷題——求眾數LeetCode
- 用 Rust 刷 leetcode 第三題RustLeetCode
- [LeetCode 刷題] 1. 兩數之和LeetCode
- [LeetCode 刷題] 2. 兩數相加LeetCode
- Leetcode刷題之 【最近的請求次數】LeetCode
- 【LeetCode刷題】896. 單調數列LeetCode
- #leetcode刷題之路1-兩數之和LeetCode
- LeetCode 刷題—樹LeetCode
- LeetCode刷題 堆LeetCode
- LeetCode刷題整理LeetCode
- leetcode刷題(一)LeetCode
- 每週刷個 leetcode 演算法題LeetCode演算法
- 【LeetCode刷題】509. 斐波那契數LeetCode
- [LeetCode 刷題] 4. 尋找兩個有序陣列的中位數 (Hard)LeetCode陣列
- [LeetCode 刷題] 3. 無重複字元的最長子串 (Medium)LeetCode字元
- #leetcode刷題之路3-無重複字元的最長子串LeetCode字元
- Leetcode刷題準備LeetCode
- LeetCode刷題—陣列LeetCode陣列
- Leetcode刷題分類LeetCode
- LeetCode 刷題筆記LeetCode筆記
- LeetCode刷題記錄LeetCode
- leetcode刷題筆記LeetCode筆記
- 如何使用leetcode刷題LeetCode
- LeetCode刷題的一點個人建議和心得LeetCode
- LeetCode刷題之第701題LeetCode
- LeetCode 刷題指南(一):為什麼要刷題LeetCode
- [藍橋杯2018決賽]最大乘積
- leetcode刷題記錄 661~LeetCode
- Leetcode刷題系列彙總LeetCode
- leetcode刷題筆記605LeetCode筆記
- Leetcode 刷題 ------1365.有多少小於當前數字的數字LeetCode
- 【LeetCode刷題(簡單程度)】劍指 Offer 57. 和為s的兩個數字LeetCode
- 刷 LeetCode 跟著這個系列就行啦----兩數之和LeetCode