📜  查找数组中最小的连续和对

📅  最后修改于: 2021-05-19 18:18:11             🧑  作者: Mango

给定一个包含N个不同整数的数组arr [] ,任务是找到一个连续对,以使成对的两个元素之和最小。
例子:

方法:
为了解决上述问题,我们必须考虑所有连续对并找到它们的和。具有最小(最小)和的对是必需的答案。

下面是上述方法的实现:

C++
//C++ program to find the smallest
// sum contiguous pair
#include
using namespace std;
   
// Function to find the smallest sum
// contiguous pair
vector smallestSumpair(int arr[], int n)
{
  
    // Contiguous pair
    vectorpair;
  
    // isntialize minimum sum
    // with maximum value
    int min_sum = INT_MAX;
  
    for(int i = 1; i < n; i++)
    {
  
        // Checking for minimum value
        if( min_sum > (arr[i] + arr[i - 1]))
        {
            min_sum = arr[i] + arr[i - 1];
            if (pair.empty())
            {
  
                // Add to pair
                pair.push_back(arr[i - 1]);
                pair.push_back(arr[i]);
            }
            else
            {
  
                // Updating pair
                pair[0] = arr[i - 1];
                pair[1] = arr[i];
            }
        }
    }
    return pair;
}
   
// Driver code
int main()
{
   int arr[] = {4, 9, -3, 2, 0};
   int n = sizeof(arr) / sizeof(arr[0]);
    
   vectorpair = smallestSumpair(arr, n);
   cout << pair[0] << " " << pair[1];
}
  
// This code is contributed by chitranayal


Java
// Java program to find the smallest
// sum contiguous pair 
import java.util.*;
  
class GFG{
      
// Function to find the smallest sum
// contiguous pair
public static Vector smallestSumpair(int[] arr,
                                              int n) 
{ 
      
    // Stores the contiguous pair 
    Vector pair = new Vector(); 
      
    // Intialize minimum sum 
    int min_sum = Integer.MAX_VALUE, i; 
      
    for(i = 1; i < n; i++) 
    { 
          
        // Checking for minimum value
        if (min_sum > (arr[i] + arr[i - 1])) 
        { 
            min_sum = arr[i] + arr[i - 1];
              
            if (pair.isEmpty()) 
            { 
                  
                // Add to pair
                pair.add(arr[i - 1]); 
                pair.add(arr[i]); 
            } 
            else
            { 
                  
                // Updating pair
                pair.set(0, arr[i - 1]);
                pair.set(1, arr[i]);
            } 
        } 
    } 
    return pair;
} 
  
// Driver Code         
public static void main(String[] args)
{
    int arr[] = { 4, 9, -3, 2, 0 }; 
    int N = arr.length; 
      
    Vector pair = new Vector(); 
    pair = smallestSumpair(arr, N);
      
    System.out.println(pair.get(0) + " " +
                       pair.get(1));
}
}
  
// This code is contributed by divyeshrabadiya07


Python3
# Python3 program to find the smallest
# sum contiguous pair
  
# importing sys
import sys
  
# Function to find the smallest sum
# contiguous pair
  
  
def smallestSumpair(arr, n):
  
    # Contiguous pair
    pair = []
  
    # isntialize minimum sum
    # with maximum value
    min_sum = sys.maxsize
  
    for i in range(1, n):
  
        # checking for minimum value
        if min_sum > (arr[i] + arr[i-1]):
            min_sum = arr[i] + arr[i-1]
  
            if pair == []:
  
                # Add to pair
                pair.append(arr[i-1])
                pair.append(arr[i])
            else:
  
                # Updating pair
                pair[0] = arr[i-1]
                pair[1] = arr[i]
  
    return pair
  
  
# Driver code
arr = [4, 9, -3, 2, 0]
n = len(arr)
pair = smallestSumpair(arr, n)
print(pair[0], pair[1])


C#
// C# program to find the smallest
// sum contiguous pair 
using System;
using System.Collections; 
using System.Collections.Generic;
  
class GFG{
  
// Function to find the smallest sum
// contiguous pair
public static ArrayList smallestSumpair(int[] arr,
                                        int n) 
{ 
      
    // Stores the contiguous pair 
    ArrayList pair = new ArrayList(); 
      
    // Intialize minimum sum 
    int min_sum = int.MaxValue, i; 
      
    for(i = 1; i < n; i++) 
    { 
          
        // Checking for minimum value
        if (min_sum > (arr[i] + arr[i - 1])) 
        { 
            min_sum = arr[i] + arr[i - 1];
              
            if (pair.Count == 0) 
            { 
                  
                // Add to pair
                pair.Add(arr[i - 1]); 
                pair.Add(arr[i]); 
            } 
            else
            { 
                  
                // Updating pair
                pair[0] = arr[i - 1];
                pair[1] = arr[i];
            } 
        } 
    } 
    return pair;
} 
  
// Driver code
public static void Main(string[] args)
{
    int []arr = { 4, 9, -3, 2, 0 }; 
    int N = arr.Length; 
      
    ArrayList pair = new ArrayList(); 
    pair = smallestSumpair(arr, N);
      
    Console.Write(pair[0] + " " + pair[1]);
}
}
  
// This code is contributed by rutvik_56


输出
-3 2

时间复杂度: O(n)