1. 程式人生 > 其它 >Java II:2.1.3、組合輸入/輸出流過濾器

Java II:2.1.3、組合輸入/輸出流過濾器

技術標籤:LeetCode陣列LeetCode排序leetcode資料結構

1.題目描述

給你一個整型陣列 nums ,在陣列中找出由三個陣列成的最大乘積,並輸出這個乘積。
示例 1:
在這裡插入圖片描述
示例 2:
在這裡插入圖片描述
示例 3:
在這裡插入圖片描述
提示:
3 <= nums.length <= 104
-1000 <= nums[i] <= 1000

2.思路

1.如果陣列中全是非負數,則排序後最大的三個數相乘即為最大乘積;如果全是非正數,則最大的三個數相乘同樣也為最大乘積。
2.如果陣列中有正數有負數,則最大乘積既可能是三個最大正數的乘積,也可能是兩個最小負數(即絕對值最大)與最大正數的乘積。
因此,用線性掃描直接得出陣列中最大的三個數以及最小的兩個數,求出1,1中的最大者結尾答案。

3.程式碼

class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        int min1 = INT_MAX, min2 = INT_MAX;
        int max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN;
        for(auto & num : nums){
            if(num < min1){
                min2 = min1;
                min1 =
num; } else if(num < min2){ min2 = num; } if(num > max1){ max3 = max2; max2 = max1; max1 = num; } else if(num > max2){ max3 = max2; max2 =
num; } else if(num > max3){ max3 = num; } } return max(min1 * min2 * max1, max1 * max2 * max3); } };

4.複雜度分析

時間複雜度:O(n)
空間複雜度:O(1)