多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 计算选择差异最大的对的方法 > 原文: [https://www.geeksforgeeks.org/count-ways-of-choosing-a-pair-with-maximum-difference/](https://www.geeksforgeeks.org/count-ways-of-choosing-a-pair-with-maximum-difference/) 给定 n 个整数数组,我们需要找到 no。 选择差异最大的对的方式。 例子: ``` Input : a[] = {3, 2, 1, 1, 3} Output : 4 Explanation:- Here, the maximum difference you can find is 2 which is from (1, 3). No. of ways of choosing it: 1) Choosing the first and third elements, 2) Choosing the first and fourth elements, 3) Choosing the third and fifth elements, 4) Choosing the fourth and fifth elements. Hence ans is 4. Input : a[] = {2, 4, 1, 1} Output : 2 Explanation:- Here, the maximum difference is 3 from (1, 4). No. of ways choosing it: 1) Choosing the second and third elements, 2) Choosing the second and fourth elements. Hence ans is 2. ``` **朴素的方法**:一个简单的解决方案是找到最小元素和最大元素以找到最大差异。 然后我们可以找到否。 通过运行两个循环选择一对的方法。 在内部循环中,检查两个元素(一个在外部循环中,另一个在内部循环中)是否有最大差异,如果是,则增加计数。最后输出计数。 时间复杂度:O(n ^ 2) 辅助空间:`O(1)` **有效方法**: 有效方法是: * 情况一(如果所有元素都相等):ans 否。 从一组 n(n-1)/ 2 个 n 元素![nC2](https://img.kancloud.cn/89/7a/897a702867349e60f193b34d3e17c8d8_49x21.png "Rendered by QuickLaTeX.com")中选择 2 个元素的方法。 * 情况二(如果所有要素都不相等):答案是否的计数的乘积。 最小元素(c1)的数量和数量 最大元素(c2)的总和,即 c1 * c2 ## C++ ```cpp // CPP Code to find no. of Ways of choosing // a pair with maximum difference #include <bits/stdc++.h> using namespace std; int countPairs(int a[], int n) {     // To find minimum and maximum of     // the array     int mn = INT_MAX;     int mx = INT_MIN;     for (int i = 0; i < n; i++) {         mn = min(mn, a[i]);         mx = max(mx, a[i]);     }     // to find the count of minimum and     // maximum elements     int c1 = 0;     int c2 = 0; // Count variables     for (int i = 0; i < n; i++) {         if (a[i] == mn)             c1++;         if (a[i] == mx)             c2++;     }     // condition for all elements equal     if (mn == mx)         return n * (n - 1) / 2;     else         return c1 * c2; } // Driver code int main() {     int a[] = { 3, 2, 1, 1, 3 };     int n = sizeof(a) / sizeof(a[0]);     cout << countPairs(a, n);     return 0; } ``` ## Java ```java // Java Code to find no. of Ways of choosing // a pair with maximum difference import java.util.*; class GFG {     static int countPairs(int a[], int n)     {         // To find minimum and maximum of         // the array         int mn = Integer.MAX_VALUE;         int mx = Integer.MIN_VALUE;         for (int i = 0; i < n; i++) {             mn = Math.min(mn, a[i]);             mx = Math.max(mx, a[i]);         }         // to find the count of minimum and         // maximum elements         int c1 = 0;         int c2 = 0; // Count variables         for (int i = 0; i < n; i++) {             if (a[i] == mn)                 c1++;             if (a[i] == mx)                 c2++;         }         // condition for all elements equal         if (mn == mx)             return n * (n - 1) / 2;         else             return c1 * c2;     }     // Driver code     public static void main(String[] args)     {         int a[] = { 3, 2, 1, 1, 3 };         int n = a.length;         System.out.print(countPairs(a, n));     } } // This code is contributed by Anant Agarwal. ``` ## Python3 ```py # Python Code to find no. # of Ways of choosing # a pair with maximum difference def countPairs(a, n):     # To find minimum and maximum of      # the array      mn = +2147483647     mx = -2147483648     for i in range(n):         mn = min(mn, a[i])         mx = max(mx, a[i])     # to find the count of minimum and      # maximum elements     c1 = 0     c2 = 0 # Count variables     for i in range(n):         if (a[i] == mn):             c1+= 1         if (a[i] == mx):             c2+= 1     # condition for all elements equal     if (mn == mx):          return  n*(n - 1) // 2     else:         return c1 * c2 # Driver code a = [ 3, 2, 1, 1, 3] n = len(a) print(countPairs(a, n)) # This code is contributed # by Anant Agarwal. ``` ## C# ```cs // C# Code to find no. of Ways of choosing // a pair with maximum difference using System; class GFG {     static int countPairs(int[] a, int n)     {         // To find minimum and maximum of         // the array         int mn = int.MaxValue;         int mx = int.MinValue;         for (int i = 0; i < n; i++) {             mn = Math.Min(mn, a[i]);             mx = Math.Max(mx, a[i]);         }         // to find the count of minimum and         // maximum elements         int c1 = 0;         int c2 = 0; // Count variables         for (int i = 0; i < n; i++) {             if (a[i] == mn)                 c1++;             if (a[i] == mx)                 c2++;         }         // condition for all elements equal         if (mn == mx)             return n * (n - 1) / 2;         else             return c1 * c2;     }     // Driver code     public static void Main()     {         int[] a = { 3, 2, 1, 1, 3 };         int n = a.Length;         Console.WriteLine(countPairs(a, n));     } } // This code is contributed by vt_m. ``` ## PHP ```php <?php // PHP Code to find no. of Ways of choosing // a pair with maximum difference function countPairs($a, $n) {     // To find minimum and maximum of     // the array     $mn = PHP_INT_MAX;     $mx = PHP_INT_MIN;     for ($i = 0; $i < $n; $i++) {         $mn = min($mn, $a[$i]);         $mx = max($mx, $a[$i]);     }     // to find the count of minimum and     // maximum elements     $c1 = 0;     $c2 = 0; // Count variables     for ($i = 0; $i < $n; $i++) {         if ($a[$i] == $mn)             $c1++;         if ($a[$i] == $mx)             $c2++;     }     // condition for all elements equal     if ($mn == $mx)         return $n * ($n - 1) / 2;     else         return $c1 * $c2; } // Driver code     $a = array( 3, 2, 1, 1, 3 );     $n = count($a);     echo countPairs($a, $n); // This code is contributed by anuj_67\. ?> ``` Output: ``` 4 ``` **时间复杂度**:找到最小和最大值的时间复杂度为 **`O(n)`**,找到最小和最大计数的时间复杂度为 **`O(n)`** 总时间复杂度:`O(n)` 辅助空间:`O(1)`