[數論]leetcode628:三個數的最大乘積(easy)

題目:
在這裏插入圖片描述
題解:

  • 分情況,找規律
  • 首先對數組進行排序,然後找到規律返回即可。
  • 1)若數組內的數字全爲負數,那麼最後結果肯定爲負數。而最大值就是最後面兩個負數相乘獲得絕對值的最大值,然後再乘以一個絕對值較小的負數即可,那就是最前面那個負數。
  • 2)若數組內的數字全爲正數,那麼最後結果肯定爲正數,而且就是最大三個正數的積。
  • 3)若數組內的數字既有負數又有正數還有0的話,那麼返回前面那兩種情況中的較大值即可。

代碼如下:

class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int n=nums.size();
        //無論有多少正數或者負數,首先一定會選擇最大數即nums[n-1],然後無非就是選擇開頭兩位還是倒數兩位 
        return max(nums[0]*nums[1]*nums[n-1],nums[n-3]*nums[n-2]*nums[n-1]);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章