LeetCode

来源:互联网 发布:php hmacsha256 编辑:程序博客网 时间:2024/05/29 03:51

Given an integer array, find three numbers whose product is maximum and output the maximum product.

Example 1:

Input: [1,2,3]Output: 6

Example 2:

Input: [1,2,3,4]Output: 24

Note:

  1. The length of the given array will be in range [3,104] and all elements are in the range [-1000, 1000].
  2. Multiplication of any three numbers in the input won't exceed the range of 32-bit signed integer.

找出三个数使得乘积最大,实在不知道这题有啥好写的。。。

排序要O(nlogn)所以写了个O(n)的做法,不过确实感觉挺无聊的。。。

class Solution {public:    int maximumProduct(vector<int>& nums) {        int n = nums.size();        int num1 = max(nums[0], max(nums[1], nums[2]));        int num3 = min(nums[0], min(nums[1], nums[2]));        int num2 = nums[0] + nums[1] + nums[2] - num1 - num3;        int mmin1 = num3;        int mmin2 = num2;        for (int i = 3; i < n; ++i) {            if (nums[i] > num1) {                num3 = num2;                num2 = num1;                num1 = nums[i];            }            else if (nums[i] > num2) {                num3 = num2;                num2 = nums[i];            }            else if (nums[i] > num3) {                num3 = nums[i];            }            if (nums[i] < mmin1) {                mmin2 = mmin1;                mmin1 = nums[i];            }            else if (nums[i] < mmin2) {                mmin2 = nums[i];            }        }        int ans = num1 * num2 * num3;        ans = max(ans, num1 * mmin1 * mmin2);        return ans;    }};