aboutsummaryrefslogtreecommitdiff
path: root/max_product_3num.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'max_product_3num.cpp')
-rw-r--r--max_product_3num.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/max_product_3num.cpp b/max_product_3num.cpp
new file mode 100644
index 0000000..1886bdb
--- /dev/null
+++ b/max_product_3num.cpp
@@ -0,0 +1,40 @@
+// 628. Maximum Product of Three Numbers
+#include "leetcode.h"
+
+/*
+ * given an integer array 'nums', find three numbers whose product is maximum
+ * and return the maximum product
+ */
+
+class Solution {
+public:
+ int maximumProduct(vector<int> &nums) {
+ int max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN;
+ int min1 = INT_MAX, min2 = INT_MAX, min3 = INT_MAX;
+ for (int i = 0; i < nums.size(); i++) {
+ if (nums[i] <= min1) {
+ min2 = min1;
+ min1 = nums[i];
+ } else if (nums[i] <= min2)
+ min2 = nums[i];
+ if (nums[i] >= max1) {
+ max3 = max2;
+ max2 = max1;
+ max1 = nums[i];
+ } else if (nums[i] >= max2) {
+ max3 = max2;
+ max2 = nums[i];
+ } else if (nums[i] >= max3)
+ max3 = nums[i];
+ }
+ return max(min1 * min2 * max1, max1 * max2 * max3);
+ }
+};
+
+int main() {
+ Solution obj;
+ vector<int> n1 = {1, 2, 3}, n2 = {1, 2, 3, 4}, n3 = {-1, -2, -3};
+ printf("%d\n", obj.maximumProduct(n1)); // expect: 6
+ printf("%d\n", obj.maximumProduct(n2)); // expect: 24
+ printf("%d\n", obj.maximumProduct(n3)); // expect: -6
+}