给定一个数组arr [],计数对arr [i],arr [j]的数量,使arr [i] + arr [j]最大,并且i 方法1(天真) 输出 : 时间复杂度: O(n ^ 2) 方法2(高效) 输出 : 时间复杂度: O(n)Example :
Input : arr[] = {1, 1, 1, 2, 2, 2}
Output : 3
Explanation: The maximum possible pair
sum where i
从0到n遍历一个循环i,即数组的长度,从i + 1到n遍历另一个循环j,以找到i C++
// CPP program to count pairs with maximum sum.
#include
Java
// Java program to count pairs
// with maximum sum.
class GFG {
// function to find the number of
// maximum pair sums
static int sum(int a[], int n)
{
// traverse through all the pairs
int maxSum = Integer.MIN_VALUE;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
maxSum = Math.max(maxSum, a[i] +
a[j]);
// traverse through all pairs and
// keep a count of the number of
// maximum pairs
int c = 0;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (a[i] + a[j] == maxSum)
c++;
return c;
}
// driver program to test the above function
public static void main(String[] args)
{
int array[] = { 1, 1, 1, 2, 2, 2 };
int n = array.length;
System.out.println(sum(array, n));
}
}
// This code is contributed by Prerna Saini
Python3
# Python program to count pairs with
# maximum sum
def _sum( a, n):
# traverse through all the pairs
maxSum = -9999999
for i in range(n):
for j in range(n):
maxSum = max(maxSum, a[i] + a[j])
# traverse through all pairs and
# keep a count of the number
# of maximum pairs
c = 0
for i in range(n):
for j in range(i+1, n):
if a[i] + a[j] == maxSum:
c+=1
return c
# driver code
array = [ 1, 1, 1, 2, 2, 2 ]
n = len(array)
print(_sum(array, n))
# This code is contributed by "Abhishek Sharma 44"
C#
// C# program to count pairs
// with maximum sum.
using System;
class GFG {
// function to find the number of
// maximum pair sums
static int sum(int []a, int n)
{
// traverse through all the pairs
int maxSum = int.MinValue;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
maxSum = Math.Max(maxSum,
a[i] + a[j]);
// traverse through all pairs and
// keep a count of the number of
// maximum pairs
int c = 0;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (a[i] + a[j] == maxSum)
c++;
return c;
}
// driver program to test the above
// function
public static void Main()
{
int []array = { 1, 1, 1, 2, 2, 2 };
int n = array.Length;
Console.WriteLine(sum(array, n));
}
}
// This code is contributed by anuj_67.
PHP
C++
// CPP program to count pairs with maximum sum.
#include
Java
// Java program to count pairs
// with maximum sum.
import java.io.*;
class GFG {
// function to find the number
// of maximum pair sums
static int sum(int a[], int n)
{
// Find maximum and second maximum
// elements. Also find their counts.
int maxVal = a[0], maxCount = 1;
int secondMax = Integer.MIN_VALUE,
secondMaxCount = 0;
for (int i = 1; i < n; i++) {
if (a[i] == maxVal)
maxCount++;
else if (a[i] > maxVal) {
secondMax = maxVal;
secondMaxCount = maxCount;
maxVal = a[i];
maxCount = 1;
}
else if (a[i] == secondMax) {
secondMax = a[i];
secondMaxCount++;
}
else if (a[i] > secondMax) {
secondMax = a[i];
secondMaxCount = 1;
}
}
// If maximum element appears
// more than once.
if (maxCount > 1)
return maxCount * (maxCount - 1) / 2;
// If maximum element appears
// only once.
return secondMaxCount;
}
// driver program
public static void main(String[] args)
{
int array[] = { 1, 1, 1, 2, 2, 2, 3 };
int n = array.length;
System.out.println(sum(array, n));
}
}
// This code is contributed by Prerna Saini
Python3
# Python 3 program to count
# pairs with maximum sum.
import sys
# Function to find the number
# of maximum pair sums
def sum(a, n):
# Find maximum and second maximum elements.
# Also find their counts.
maxVal = a[0]; maxCount = 1
secondMax = sys.maxsize
for i in range(1, n) :
if (a[i] == maxVal) :
maxCount += 1
elif (a[i] > maxVal) :
secondMax = maxVal
secondMaxCount = maxCount
maxVal = a[i]
maxCount = 1
elif (a[i] == secondMax) :
secondMax = a[i]
secondMaxCount += 1
elif (a[i] > secondMax) :
secondMax = a[i]
secondMaxCount = 1
# If maximum element appears more than once.
if (maxCount > 1):
return maxCount * (maxCount - 1) / 2
# If maximum element appears only once.
return secondMaxCount
# Driver Code
array = [1, 1, 1, 2, 2, 2, 3]
n = len(array)
print(sum(array, n))
# This code is contributed by Smitha Dinesh Semwal
C#
// C# program to count pairs with maximum
// sum.
using System;
class GFG {
// function to find the number
// of maximum pair sums
static int sum(int []a, int n)
{
// Find maximum and second maximum
// elements. Also find their counts.
int maxVal = a[0], maxCount = 1;
int secondMax = int.MinValue;
int secondMaxCount = 0;
for (int i = 1; i < n; i++)
{
if (a[i] == maxVal)
maxCount++;
else if (a[i] > maxVal)
{
secondMax = maxVal;
secondMaxCount = maxCount;
maxVal = a[i];
maxCount = 1;
}
else if (a[i] == secondMax)
{
secondMax = a[i];
secondMaxCount++;
}
else if (a[i] > secondMax)
{
secondMax = a[i];
secondMaxCount = 1;
}
}
// If maximum element appears
// more than once.
if (maxCount > 1)
return maxCount *
(maxCount - 1) / 2;
// If maximum element appears
// only once.
return secondMaxCount;
}
// driver program
public static void Main()
{
int []array = { 1, 1, 1, 2,
2, 2, 3 };
int n = array.Length;
Console.WriteLine(sum(array, n));
}
}
// This code is contributed by anuj_67.
PHP
$maxVal)
{
$secondMax = $maxVal;
$secondMaxCount = $maxCount;
$maxVal = $a[$i];
$maxCount = 1;
}
else if ($a[$i] == $secondMax)
{
$secondMax = $a[$i];
$secondMaxCount++;
}
else if ($a[$i] > $secondMax)
{
$secondMax = $a[$i];
$secondMaxCount = 1;
}
}
// If maximum element appears
// more than once.
if ($maxCount > 1)
return $maxCount *
($maxCount - 1) / 2;
// If maximum element
// appears only once.
return $secondMaxCount;
}
// Driver Code
$array = array(1, 1, 1, 2,
2, 2, 3 );
$n = count($array);
echo sum($array, $n);
// This code is contributed by anuj_67.
?>
3
如果我们仔细观察,我们会发现以下事实。
C++
// CPP program to count pairs with maximum sum.
#include
Java
// Java program to count pairs
// with maximum sum.
import java.io.*;
class GFG {
// function to find the number
// of maximum pair sums
static int sum(int a[], int n)
{
// Find maximum and second maximum
// elements. Also find their counts.
int maxVal = a[0], maxCount = 1;
int secondMax = Integer.MIN_VALUE,
secondMaxCount = 0;
for (int i = 1; i < n; i++) {
if (a[i] == maxVal)
maxCount++;
else if (a[i] > maxVal) {
secondMax = maxVal;
secondMaxCount = maxCount;
maxVal = a[i];
maxCount = 1;
}
else if (a[i] == secondMax) {
secondMax = a[i];
secondMaxCount++;
}
else if (a[i] > secondMax) {
secondMax = a[i];
secondMaxCount = 1;
}
}
// If maximum element appears
// more than once.
if (maxCount > 1)
return maxCount * (maxCount - 1) / 2;
// If maximum element appears
// only once.
return secondMaxCount;
}
// driver program
public static void main(String[] args)
{
int array[] = { 1, 1, 1, 2, 2, 2, 3 };
int n = array.length;
System.out.println(sum(array, n));
}
}
// This code is contributed by Prerna Saini
Python3
# Python 3 program to count
# pairs with maximum sum.
import sys
# Function to find the number
# of maximum pair sums
def sum(a, n):
# Find maximum and second maximum elements.
# Also find their counts.
maxVal = a[0]; maxCount = 1
secondMax = sys.maxsize
for i in range(1, n) :
if (a[i] == maxVal) :
maxCount += 1
elif (a[i] > maxVal) :
secondMax = maxVal
secondMaxCount = maxCount
maxVal = a[i]
maxCount = 1
elif (a[i] == secondMax) :
secondMax = a[i]
secondMaxCount += 1
elif (a[i] > secondMax) :
secondMax = a[i]
secondMaxCount = 1
# If maximum element appears more than once.
if (maxCount > 1):
return maxCount * (maxCount - 1) / 2
# If maximum element appears only once.
return secondMaxCount
# Driver Code
array = [1, 1, 1, 2, 2, 2, 3]
n = len(array)
print(sum(array, n))
# This code is contributed by Smitha Dinesh Semwal
C#
// C# program to count pairs with maximum
// sum.
using System;
class GFG {
// function to find the number
// of maximum pair sums
static int sum(int []a, int n)
{
// Find maximum and second maximum
// elements. Also find their counts.
int maxVal = a[0], maxCount = 1;
int secondMax = int.MinValue;
int secondMaxCount = 0;
for (int i = 1; i < n; i++)
{
if (a[i] == maxVal)
maxCount++;
else if (a[i] > maxVal)
{
secondMax = maxVal;
secondMaxCount = maxCount;
maxVal = a[i];
maxCount = 1;
}
else if (a[i] == secondMax)
{
secondMax = a[i];
secondMaxCount++;
}
else if (a[i] > secondMax)
{
secondMax = a[i];
secondMaxCount = 1;
}
}
// If maximum element appears
// more than once.
if (maxCount > 1)
return maxCount *
(maxCount - 1) / 2;
// If maximum element appears
// only once.
return secondMaxCount;
}
// driver program
public static void Main()
{
int []array = { 1, 1, 1, 2,
2, 2, 3 };
int n = array.Length;
Console.WriteLine(sum(array, n));
}
}
// This code is contributed by anuj_67.
的PHP
$maxVal)
{
$secondMax = $maxVal;
$secondMaxCount = $maxCount;
$maxVal = $a[$i];
$maxCount = 1;
}
else if ($a[$i] == $secondMax)
{
$secondMax = $a[$i];
$secondMaxCount++;
}
else if ($a[$i] > $secondMax)
{
$secondMax = $a[$i];
$secondMaxCount = 1;
}
}
// If maximum element appears
// more than once.
if ($maxCount > 1)
return $maxCount *
($maxCount - 1) / 2;
// If maximum element
// appears only once.
return $secondMaxCount;
}
// Driver Code
$array = array(1, 1, 1, 2,
2, 2, 3 );
$n = count($array);
echo sum($array, $n);
// This code is contributed by anuj_67.
?>
3