📜  数组中的最大三元组总和

📅  最后修改于: 2021-04-24 19:10:11             🧑  作者: Mango

给定一个数组,任务是在数组中找到最大的三元组和。
例子 :

Input : arr[] = {1, 2, 3, 0, -1, 8, 10} 
Output : 21
10 + 8 + 3 = 21

Input : arr[] = {9, 8, 20, 3, 4, -1, 0}
Output : 37
20 + 9 + 8 = 37

朴素的方法:在这种方法中,我们简单地运行三个循环,并一一加三个元素,如果三个元素的和大于则与先前的和相比较,然后存储在先前的和中。

C++
// C++ code to find maximum triplet sum
#include 
using namespace std;
 
int maxTripletSum(int arr[], int n)
{
    // Initialize sum with INT_MIN
    int sum = INT_MIN;
 
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
            for (int k = j + 1; k < n; k++)
                if (sum < arr[i] + arr[j] + arr[k])
                    sum = arr[i] + arr[j] + arr[k];               
    return sum;        
}
 
// Driven code
int main()
{
    int arr[] = { 1, 0, 8, 6, 4, 2 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << maxTripletSum(arr, n);
    return 0;
}


Java
// Java code to find maximum triplet sum
import java.io.*;
 
class GFG {
     
    static int maxTripletSum(int arr[], int n)
    {
        // Initialize sum with INT_MIN
        int sum = -1000000;
     
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++)
                for (int k = j + 1; k < n; k++)
                    if (sum < arr[i] + arr[j] + arr[k])
                        sum = arr[i] + arr[j] + arr[k];            
        return sum;        
    }
     
    // Driven code
    public static void main(String args[])
    {
        int arr[] = { 1, 0, 8, 6, 4, 2 };
        int n = arr.length;
        System.out.println(maxTripletSum(arr, n));
    }
}
 
// This code is contributed by Nikita Tiwari.


Python3
# Python 3 code to find
# maximum triplet sum
 
def maxTripletSum(arr, n) :
 
    # Initialize sum with
    # INT_MIN
    sm = -1000000
 
    for i in range(0, n) :
        for j in range(i + 1, n) :
            for k in range(j + 1, n) :
     
                if (sm < (arr[i] + arr[j] + arr[k])) :
                    sm = arr[i] + arr[j] + arr[k]            
    return sm
     
# Driven code
arr = [ 1, 0, 8, 6, 4, 2 ]
n = len(arr)
 
print(maxTripletSum(arr, n))
 
# This code is contributed by Nikita Tiwari.


C#
// C# code to find maximum triplet sum
using System;
 
class GFG {
 
    static int maxTripletSum(int[] arr, int n)
    {
        // Initialize sum with INT_MIN
        int sum = -1000000;
 
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++)
                for (int k = j + 1; k < n; k++)
                    if (sum < arr[i] + arr[j] + arr[k])
                        sum = arr[i] + arr[j] + arr[k];
        return sum;
    }
 
    // Driven code
    public static void Main()
    {
        int[] arr = { 1, 0, 8, 6, 4, 2 };
        int n = arr.Length;
        Console.WriteLine(maxTripletSum(arr, n));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript

 
// This code is contributed by sanjoy_62.


C++
// C++ code to find maximum triplet sum
#include 
using namespace std;
 
// This function assumes that there are at least
// three elements in arr[].
int maxTripletSum(int arr[], int n)
{
    // sort the given array
    sort(arr, arr + n);
 
    // After sorting the array.
    // Add last three element of the given array
    return arr[n - 1] + arr[n - 2] + arr[n - 3];
}
 
// Driven code
int main()
{
    int arr[] = { 1, 0, 8, 6, 4, 2 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << maxTripletSum(arr, n);
    return 0;
}


Java
// Java code to find maximum triplet sum
import java.io.*;
import java.util.*;
 
 
class GFG {
     
    // This function assumes that there are
    // at least three elements in arr[].
    static int maxTripletSum(int arr[], int n)
    {
        // sort the given array
        Arrays.sort(arr);
     
        // After sorting the array.
        // Add last three element
        // of the given array
        return arr[n - 1] + arr[n - 2] + arr[n - 3];
    }
     
    // Driven code
    public static void main(String args[])
    {
        int arr[] = { 1, 0, 8, 6, 4, 2 };
        int n = arr.length;
        System.out.println(maxTripletSum(arr, n));
    }
}
 
 
// This code is contributed by Nikita Tiwari.


Python3
# Python 3 code to find
# maximum triplet sum
 
# This function assumes
# that there are at least
# three elements in arr[].
def maxTripletSum(arr, n) :
 
    # sort the given array
    arr.sort()
 
    # After sorting the array.
    # Add last three element
    # of the given array
    return (arr[n - 1] + arr[n - 2] + arr[n - 3])
     
     
# Driven code
arr = [ 1, 0, 8, 6, 4, 2 ]
n = len(arr)
 
print(maxTripletSum(arr, n))
 
# This code is contributed by Nikita Tiwari.


C#
// C# code to find maximum triplet sum
using System;
 
class GFG {
 
    // This function assumes that there are
    // at least three elements in arr[].
    static int maxTripletSum(int[] arr, int n)
    {
        // sort the given array
        Array.Sort(arr);
 
        // After sorting the array.
        // Add last three element
        // of the given array
        return arr[n - 1] + arr[n - 2] + arr[n - 3];
    }
 
    // Driven code
    public static void Main()
    {
        int[] arr = { 1, 0, 8, 6, 4, 2 };
        int n = arr.Length;
        Console.WriteLine(maxTripletSum(arr, n));
    }
}
 
// This code is contributed by vt_m.


PHP


Javascript


C++
// C++ code to find maximum triplet sum
#include 
using namespace std;
 
// This function assumes that there are at least
// three elements in arr[].
int maxTripletSum(int arr[], int n)
{
    // Initialize Maximum, second maximum and third
    // maximum element
    int maxA = INT_MIN, maxB = INT_MIN, maxC = INT_MIN;
 
    for (int i = 0; i < n; i++) {
 
        // Update Maximum, second maximum and third
        // maximum element
        if (arr[i] > maxA) {
            maxC = maxB;
            maxB = maxA;
            maxA = arr[i];
        }
 
        // Update second maximum and third maximum
        // element
        else if (arr[i] > maxB) {
            maxC = maxB;
            maxB = arr[i];
        }
 
        // Update third maximum element
        else if (arr[i] > maxC)
            maxC = arr[i];
    }
 
    return (maxA + maxB + maxC);
}
 
// Driven code
int main()
{
    int arr[] = { 1, 0, 8, 6, 4, 2 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << maxTripletSum(arr, n);
    return 0;
}


Java
// Java code to find maximum triplet sum
import java.io.*;
import java.util.*;
 
 
class GFG {
     
    // This function assumes that there
    // are at least  three elements in arr[].
    static int maxTripletSum(int arr[], int n)
    {
        // Initialize Maximum, second maximum and third
        // maximum element
        int maxA = -100000000, maxB = -100000000;
        int maxC = -100000000;
     
        for (int i = 0; i < n; i++) {
     
            // Update Maximum, second maximum
            // and third maximum element
            if (arr[i] > maxA)
            {
                maxC = maxB;
                maxB = maxA;
                maxA = arr[i];
            }
     
            // Update second maximum and third maximum
            // element
            else if (arr[i] > maxB)
            {
                maxC = maxB;
                maxB = arr[i];
            }
     
            // Update third maximum element
            else if (arr[i] > maxC)
                maxC = arr[i];
        }
     
        return (maxA + maxB + maxC);
    }
 
    // Driven code
    public static void main(String args[])
    {
        int arr[] = { 1, 0, 8, 6, 4, 2 };
        int n = arr.length;
        System.out.println(maxTripletSum(arr, n));
    }
}
 
 
// This code is contributed by Nikita Tiwari.


Python3
# Python 3 code to find
# maximum triplet sum
 
# This function assumes
# that there are at least
# three elements in arr[].
def maxTripletSum(arr, n) :
 
    # Initialize Maximum, second
    # maximum and third maximum
    # element
    maxA = -100000000
    maxB = -100000000
    maxC = -100000000
 
    for i in range(0, n) :
     
        # Update Maximum, second maximum
        # and third  maximum element
        if (arr[i] > maxA) :
            maxC = maxB
            maxB = maxA
            maxA = arr[i]
 
        # Update second maximum and
        # third maximum element
        elif (arr[i] > maxB) :
            maxC = maxB
            maxB = arr[i]
         
        # Update third maximum element
        elif (arr[i] > maxC) :
            maxC = arr[i]
             
    return (maxA + maxB + maxC)
     
# Driven code
arr = [ 1, 0, 8, 6, 4, 2 ]
n = len(arr)
 
print(maxTripletSum(arr, n))
 
# This code is contributed by Nikita Tiwari.


C#
// C# code to find maximum triplet sum
using System;
 
class GFG {
 
    // This function assumes that there
    // are at least three elements in arr[].
    static int maxTripletSum(int[] arr, int n)
    {
        // Initialize Maximum, second maximum
        // and third maximum element
        int maxA = -100000000, maxB = -100000000;
        int maxC = -100000000;
 
        for (int i = 0; i < n; i++) {
 
            // Update Maximum, second maximum
            // and third maximum element
            if (arr[i] > maxA) {
                maxC = maxB;
                maxB = maxA;
                maxA = arr[i];
            }
 
            // Update second maximum and third
            // maximum element
            else if (arr[i] > maxB) {
                maxC = maxB;
                maxB = arr[i];
            }
 
            // Update third maximum element
            else if (arr[i] > maxC)
                maxC = arr[i];
        }
 
        return (maxA + maxB + maxC);
    }
 
    // Driven code
    public static void Main()
    {
        int[] arr = { 1, 0, 8, 6, 4, 2 };
        int n = arr.Length;
        Console.WriteLine(maxTripletSum(arr, n));
    }
}
 
// This code is contributed by vt_m.


PHP
 $maxA)
        {
            $maxC = $maxB;
            $maxB = $maxA;
            $maxA = $arr[$i];
        }
 
        // Update second maximum and
        // third maximum element
        else if ($arr[$i] > $maxB)
        {
            $maxC = $maxB;
            $maxB = $arr[$i];
        }
 
        // Update third maximum element
        else if ($arr[$i] > $maxC)
            $maxC = $arr[$i];
    }
 
    return ($maxA + $maxB + $maxC);
}
 
// Driven code
$arr = array( 1, 0, 8, 6, 4, 2 );
$n = count($arr);
echo maxTripletSum($arr, $n);
 
// This code is contributed by anuj_67.
?>


输出 :

18

时间复杂度:O(n ^ 3)
空间复杂度:O(1)
另一种方法:在这种方法中,我们首先需要对整个数组进行排序,然后,当我们添加数组的最后三个元素时,我们将找到三叉树的最大和。

C++

// C++ code to find maximum triplet sum
#include 
using namespace std;
 
// This function assumes that there are at least
// three elements in arr[].
int maxTripletSum(int arr[], int n)
{
    // sort the given array
    sort(arr, arr + n);
 
    // After sorting the array.
    // Add last three element of the given array
    return arr[n - 1] + arr[n - 2] + arr[n - 3];
}
 
// Driven code
int main()
{
    int arr[] = { 1, 0, 8, 6, 4, 2 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << maxTripletSum(arr, n);
    return 0;
}

Java

// Java code to find maximum triplet sum
import java.io.*;
import java.util.*;
 
 
class GFG {
     
    // This function assumes that there are
    // at least three elements in arr[].
    static int maxTripletSum(int arr[], int n)
    {
        // sort the given array
        Arrays.sort(arr);
     
        // After sorting the array.
        // Add last three element
        // of the given array
        return arr[n - 1] + arr[n - 2] + arr[n - 3];
    }
     
    // Driven code
    public static void main(String args[])
    {
        int arr[] = { 1, 0, 8, 6, 4, 2 };
        int n = arr.length;
        System.out.println(maxTripletSum(arr, n));
    }
}
 
 
// This code is contributed by Nikita Tiwari.

Python3

# Python 3 code to find
# maximum triplet sum
 
# This function assumes
# that there are at least
# three elements in arr[].
def maxTripletSum(arr, n) :
 
    # sort the given array
    arr.sort()
 
    # After sorting the array.
    # Add last three element
    # of the given array
    return (arr[n - 1] + arr[n - 2] + arr[n - 3])
     
     
# Driven code
arr = [ 1, 0, 8, 6, 4, 2 ]
n = len(arr)
 
print(maxTripletSum(arr, n))
 
# This code is contributed by Nikita Tiwari.

C#

// C# code to find maximum triplet sum
using System;
 
class GFG {
 
    // This function assumes that there are
    // at least three elements in arr[].
    static int maxTripletSum(int[] arr, int n)
    {
        // sort the given array
        Array.Sort(arr);
 
        // After sorting the array.
        // Add last three element
        // of the given array
        return arr[n - 1] + arr[n - 2] + arr[n - 3];
    }
 
    // Driven code
    public static void Main()
    {
        int[] arr = { 1, 0, 8, 6, 4, 2 };
        int n = arr.Length;
        Console.WriteLine(maxTripletSum(arr, n));
    }
}
 
// This code is contributed by vt_m.

的PHP


Java脚本


输出 :

18

时间复杂度:O(nlogn)
空间复杂度:O(1)
有效方法:扫描数组并计算数组中存在的Maximum,第二最大和第三最大元素,并返回其总和,即为最大和。

C++

// C++ code to find maximum triplet sum
#include 
using namespace std;
 
// This function assumes that there are at least
// three elements in arr[].
int maxTripletSum(int arr[], int n)
{
    // Initialize Maximum, second maximum and third
    // maximum element
    int maxA = INT_MIN, maxB = INT_MIN, maxC = INT_MIN;
 
    for (int i = 0; i < n; i++) {
 
        // Update Maximum, second maximum and third
        // maximum element
        if (arr[i] > maxA) {
            maxC = maxB;
            maxB = maxA;
            maxA = arr[i];
        }
 
        // Update second maximum and third maximum
        // element
        else if (arr[i] > maxB) {
            maxC = maxB;
            maxB = arr[i];
        }
 
        // Update third maximum element
        else if (arr[i] > maxC)
            maxC = arr[i];
    }
 
    return (maxA + maxB + maxC);
}
 
// Driven code
int main()
{
    int arr[] = { 1, 0, 8, 6, 4, 2 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << maxTripletSum(arr, n);
    return 0;
}

Java

// Java code to find maximum triplet sum
import java.io.*;
import java.util.*;
 
 
class GFG {
     
    // This function assumes that there
    // are at least  three elements in arr[].
    static int maxTripletSum(int arr[], int n)
    {
        // Initialize Maximum, second maximum and third
        // maximum element
        int maxA = -100000000, maxB = -100000000;
        int maxC = -100000000;
     
        for (int i = 0; i < n; i++) {
     
            // Update Maximum, second maximum
            // and third maximum element
            if (arr[i] > maxA)
            {
                maxC = maxB;
                maxB = maxA;
                maxA = arr[i];
            }
     
            // Update second maximum and third maximum
            // element
            else if (arr[i] > maxB)
            {
                maxC = maxB;
                maxB = arr[i];
            }
     
            // Update third maximum element
            else if (arr[i] > maxC)
                maxC = arr[i];
        }
     
        return (maxA + maxB + maxC);
    }
 
    // Driven code
    public static void main(String args[])
    {
        int arr[] = { 1, 0, 8, 6, 4, 2 };
        int n = arr.length;
        System.out.println(maxTripletSum(arr, n));
    }
}
 
 
// This code is contributed by Nikita Tiwari.

Python3

# Python 3 code to find
# maximum triplet sum
 
# This function assumes
# that there are at least
# three elements in arr[].
def maxTripletSum(arr, n) :
 
    # Initialize Maximum, second
    # maximum and third maximum
    # element
    maxA = -100000000
    maxB = -100000000
    maxC = -100000000
 
    for i in range(0, n) :
     
        # Update Maximum, second maximum
        # and third  maximum element
        if (arr[i] > maxA) :
            maxC = maxB
            maxB = maxA
            maxA = arr[i]
 
        # Update second maximum and
        # third maximum element
        elif (arr[i] > maxB) :
            maxC = maxB
            maxB = arr[i]
         
        # Update third maximum element
        elif (arr[i] > maxC) :
            maxC = arr[i]
             
    return (maxA + maxB + maxC)
     
# Driven code
arr = [ 1, 0, 8, 6, 4, 2 ]
n = len(arr)
 
print(maxTripletSum(arr, n))
 
# This code is contributed by Nikita Tiwari.

C#

// C# code to find maximum triplet sum
using System;
 
class GFG {
 
    // This function assumes that there
    // are at least three elements in arr[].
    static int maxTripletSum(int[] arr, int n)
    {
        // Initialize Maximum, second maximum
        // and third maximum element
        int maxA = -100000000, maxB = -100000000;
        int maxC = -100000000;
 
        for (int i = 0; i < n; i++) {
 
            // Update Maximum, second maximum
            // and third maximum element
            if (arr[i] > maxA) {
                maxC = maxB;
                maxB = maxA;
                maxA = arr[i];
            }
 
            // Update second maximum and third
            // maximum element
            else if (arr[i] > maxB) {
                maxC = maxB;
                maxB = arr[i];
            }
 
            // Update third maximum element
            else if (arr[i] > maxC)
                maxC = arr[i];
        }
 
        return (maxA + maxB + maxC);
    }
 
    // Driven code
    public static void Main()
    {
        int[] arr = { 1, 0, 8, 6, 4, 2 };
        int n = arr.Length;
        Console.WriteLine(maxTripletSum(arr, n));
    }
}
 
// This code is contributed by vt_m.

的PHP

 $maxA)
        {
            $maxC = $maxB;
            $maxB = $maxA;
            $maxA = $arr[$i];
        }
 
        // Update second maximum and
        // third maximum element
        else if ($arr[$i] > $maxB)
        {
            $maxC = $maxB;
            $maxB = $arr[$i];
        }
 
        // Update third maximum element
        else if ($arr[$i] > $maxC)
            $maxC = $arr[$i];
    }
 
    return ($maxA + $maxB + $maxC);
}
 
// Driven code
$arr = array( 1, 0, 8, 6, 4, 2 );
$n = count($arr);
echo maxTripletSum($arr, $n);
 
// This code is contributed by anuj_67.
?>

输出 :

18

时间复杂度: O(n)
空间复杂度: O(1)