📌  相关文章
📜  最大化给定数组中两对之间的余差

📅  最后修改于: 2022-05-13 01:56:06.773000             🧑  作者: Mango

最大化给定数组中两对之间的余差

给定一个大小为N的数组arr[] ,任务是找到 4 个索引i, j, k, l使得0 <= i, j, k, l < Narr[i]%arr[j ] – arr[k]%arr[l]是最大值。打印最大差异。如果不存在,则打印-1。

例子:

天真的方法:蛮力的想法是检查所有可能的组合,然后找到最大的差异。
时间复杂度: O(N 4 )
辅助空间: O(1)

有效方法:这个想法是基于观察到的,在对数组进行升序排序时,从左侧选择第一对,即最小 2 个值,从右侧选择第二对,即最大 2 个值给出了答案。此外, arr[i+1]%arr[i]总是小于等于arr[i]%arr[i+1]。因此,最小化第一对值并最大化第二对值。请按照以下步骤解决问题:

  • 如果数组的大小小于4,则返回-1。
  • 按升序对数组arr[]进行排序。
  • 首先将变量初始化为arr[1]%arr[0]然后将变量初始化为arr[N-2]%arr[N-1]。
  • 执行上述步骤后,打印second-first的值作为答案。

下面是上述方法的实现。

C++
// C++ program for the above approach
#include 
using namespace std;
 
// Function to find the required
// maximum difference
void maxProductDifference(vector& arr)
{
 
    // Base Case
    if (arr.size() < 4) {
        cout << "-1\n";
        return;
    }
 
    // Sort the array
    sort(arr.begin(), arr.end());
 
    // First pair
    int first = arr[1] % arr[0];
 
    // Second pair
    int second = arr[arr.size() - 2]
                 % arr[arr.size() - 1];
 
    // Print the result
    cout << second - first;
 
    return;
}
 
// Driver Code
int main()
{
    vector arr = { 1, 2, 4, 6, 8, 3, 5, 7 };
 
    maxProductDifference(arr);
 
    return 0;
}


Java
// Java program for the above approach
import java.io.*;
import java.util.Arrays;
 
class GFG
{
   
    // Function to find the required
    // maximum difference
    static void maxProductDifference(int[] arr)
    {
 
        // Base Case
        if (arr.length < 4) {
            System.out.println("-1");
            return;
        }
 
        // Sort the array
        Arrays.sort(arr);
 
        // First pair
        int first = arr[1] % arr[0];
 
        // Second pair
        int second
            = arr[arr.length - 2] % arr[arr.length - 1];
 
        // Print the result
        System.out.println(second - first);
 
        return;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int[] arr = { 1, 2, 4, 6, 8, 3, 5, 7 };
 
        maxProductDifference(arr);
    }
}
 
// This code is contributed by Potta Lokesh


Python3
# python program for the above approach
 
# Function to find the required
# maximum difference
 
 
def maxProductDifference(arr):
 
    # Base Case
    if (len(arr) < 4):
        print("-1")
        return
 
        # Sort the array
 
    arr.sort()
 
    # First pair
    first = arr[1] % arr[0]
 
    # Second pair
 
    second = arr[len(arr) - 2] % arr[len(arr) - 1]
 
    # Print the result
    print(second - first)
 
 
# Driver Code
if __name__ == "__main__":
 
    arr = [1, 2, 4, 6, 8, 3, 5, 7]
 
    maxProductDifference(arr)
 
    # This code is contributed by rakeshsahni


C#
// C# program for the above approach
using System;
 
public class GFG
{
   
    // Function to find the required
    // maximum difference
    static void maxProductDifference(int[] arr)
    {
 
        // Base Case
        if (arr.Length < 4) {
            Console.WriteLine("-1");
            return;
        }
 
        // Sort the array
        Array.Sort(arr);
 
        // First pair
        int first = arr[1] % arr[0];
 
        // Second pair
        int second
            = arr[arr.Length - 2] % arr[arr.Length - 1];
 
        // Print the result
        Console.WriteLine(second - first);
 
        return;
    }
 
    // Driver Code
    public static void Main(String[] args)
    {
        int[] arr = { 1, 2, 4, 6, 8, 3, 5, 7 };
 
        maxProductDifference(arr);
    }
}
 
// This code is contributed by shikhasingrajput


Javascript



输出:
7

时间复杂度: O(N*log(N))
辅助空间: O(1)