Find the maximum product of 4 elements in the array.
Example:
Input: arr[]={3,1,4,-5,-6,8} Output: 960
Approach
Java
public class MaxProd4ElementArray {public static void main(String[] args) {// array must contains 4 elementsint arr[] = { 3, 1, 4, -5, -6, 8 };int n = arr.length;// i.e (-5)*(-6)*8int maximum = maximumProduct(arr, n);System.out.println(maximum);}// function to find the maximum product// of three numbers in the array// array must contains at least 4 elementsprivate static int maximumProduct(int[] arr, int n) {int max1 = Integer.MIN_VALUE;int max2 = Integer.MIN_VALUE;int max3 = Integer.MIN_VALUE;int max4 = Integer.MIN_VALUE;// find the maximum four elementsfor (int i = 0; i < n; i++) {// update max1,max2, man3 and max4if (arr[i] > max1) {max4 = Math.max(max4, max3);max3 = Math.max(max2, max3);max2 = Math.max(max2, max1);max1 = arr[i];}// update max2,max3 and max4else if (arr[i] > max2) {max4 = Math.max(max4, max3);max3 = Math.max(max2, max3);max2 = arr[i];}// update max3 and max4else if (arr[i] > max3) {max4 = Math.max(max4, max3);max3 = arr[i];}// update max4else if (arr[i] > max4)max4 = arr[i];}int min1 = Integer.MAX_VALUE;int min2 = Integer.MAX_VALUE;int min3 = Integer.MAX_VALUE;int min4 = Integer.MAX_VALUE;// find the minimum four elementsfor (int i = 0; i < n; i++) {// update min1 ,min2,min3 and min4if (arr[i] < min1) {min4 = Math.min(min3, min4);min3 = Math.min(min2, min3);min2 = Math.min(min1, min2);min1 = arr[i];}// update min2,min3 and min4else if (arr[i] < min2) {min4 = Math.min(min4, min3);min3 = Math.min(min2, min3);min2 = arr[i];}// update min3 and min4else if (arr[i] < min3) {min4 = Math.min(min4, min3);min3 = arr[i];}// update min4else if (arr[i] < min4)min4 = arr[i];}// case 1: maximum=max1*max2*max3*max4// case 2: maximum =min1*min2*min3*min4// case 3: maximum=min1*min2*max1*max2int case1 = max1 * max2 * max3 * max4;int case2 = min1 * min2 * min3 * min4;int case3 = min1 * min2 * max1 * max2;return Math.max(case1, Math.max(case2, case3));}}
C++
#include <bits/stdc++.h>using namespace std;//function to find the maximum product//of three numbers in the array//array must contains at least 4 elementsint maximumProduct(int arr[],int n){int max1=INT_MIN,max2=INT_MIN,max3=INT_MIN,max4=INT_MIN;//find the maximum four elementsfor(int i=0;i<n;i++){//update max1,max2, man3 and max4if(arr[i]>max1){max4=max(max4,max3);max3=max(max2,max3);max2=max(max2,max1);max1=arr[i];}//update max2,max3 and max4else if(arr[i]>max2){max4=max(max4,max3);max3=max(max2,max3);max2=arr[i];}//update max3 and max4else if(arr[i]>max3){max4=max(max4,max3);max3=arr[i];}//update max4else if(arr[i]>max4)max4=arr[i];}int min1=INT_MAX,min2=INT_MAX,min3=INT_MAX,min4=INT_MAX;//find the minimum four elementsfor(int i=0;i<n;i++){//update min1 ,min2,min3 and min4if(arr[i]<min1){min4=min(min3,min4);min3=min(min2,min3);min2=min(min1,min2);min1=arr[i];}//update min2,min3 and min4else if(arr[i]<min2){min4=min(min4,min3);min3=min(min2,min3);min2=arr[i];}//update min3 and min4else if(arr[i]<min3){min4=min(min4,min3);min3=arr[i];}//update min4else if(arr[i]<min4)min4=arr[i];}//case 1: maximum=max1*max2*max3*max4//case 2: maximum =min1*min2*min3*min4//case 3: maximum=min1*min2*max1*max2int case1=max1*max2*max3*max4;int case2=min1*min2*min3*min4;int case3=min1*min2*max1*max2;return max(case1,max(case2,case3));}int main(){//array must contains 4 elementsint arr[]={3,1,4,-5,-6,8};int n=sizeof(arr)/sizeof(arr[0]);//i.e (-5)*(-6)*8*4int maximum=maximumProduct(arr,n);cout<<maximum<<"\n";return 0;}//Time Complexity: O(n)
No comments:
Post a Comment