📜  平均值最大的子集数

📅  最后修改于: 2021-04-22 02:25:54             🧑  作者: Mango

给定大小为N的数组arr [] ,任务是计算平均值最大的arr []子集的数量。
例子:

方法:任何子集的平均值的最大值将是该子集仅由数组中的最大元素组成时。因此,为了计数所有可能的子集,请从数组中找到最大元素的频率,即cnt ,而可能的子集的计数将为2 cnt – 1
下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to return the coutn of
// subsets with the maximum mean
int cntSubSets(int arr[], int n)
{
 
    // Maximum value from the array
    int maxVal = *max_element(arr, arr + n);
 
    // To store the number of times maximum
    // element appears in the array
    int cnt = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] == maxVal)
            cnt++;
    }
 
    // Return the count of valid subsets
    return (pow(2, cnt) - 1);
}
 
// Driver code
int main()
{
    int arr[] = { 1, 2, 1, 2 };
    int n = sizeof(arr) / sizeof(int);
 
    cout << cntSubSets(arr, n);
 
    return 0;
}


Java
// Java implementation of the approach
import java.util.*;
 
class GFG
{
 
// Function to return the coutn of
// subsets with the maximum mean
static int cntSubSets(int arr[], int n)
{
 
    // Maximum value from the array
    int maxVal = Arrays.stream(arr).max().getAsInt();
 
    // To store the number of times maximum
    // element appears in the array
    int cnt = 0;
    for (int i = 0; i < n; i++)
    {
        if (arr[i] == maxVal)
            cnt++;
    }
 
    // Return the count of valid subsets
    return (int) (Math.pow(2, cnt) - 1);
}
 
// Driver code
public static void main(String []args)
{
    int arr[] = { 1, 2, 1, 2 };
    int n = arr.length;
 
    System.out.println(cntSubSets(arr, n));
}
}
 
// This code is contributed by Rajput-Ji


Python3
# Python3 implementation of the approach
 
# Function to return the coutn of
# subsets with the maximum mean
def cntSubSets(arr, n) :
 
    # Maximum value from the array
    maxVal = max(arr);
 
    # To store the number of times maximum
    # element appears in the array
    cnt = 0;
    for i in range(n) :
        if (arr[i] == maxVal) :
            cnt += 1;
 
    # Return the count of valid subsets
    return ((2 ** cnt) - 1);
 
# Driver code
if __name__ == "__main__" :
     
    arr= [ 1, 2, 1, 2 ];
    n = len(arr);
     
    print(cntSubSets(arr, n));
 
# This code is contributed by AnkitRai01


C#
// C# implementation of the approach
using System;
using System.Linq;
                     
class GFG
{
 
// Function to return the coutn of
// subsets with the maximum mean
static int cntSubSets(int []arr, int n)
{
 
    // Maximum value from the array
    int maxVal = arr.Max();
 
    // To store the number of times maximum
    // element appears in the array
    int cnt = 0;
    for (int i = 0; i < n; i++)
    {
        if (arr[i] == maxVal)
            cnt++;
    }
 
    // Return the count of valid subsets
    return (int) (Math.Pow(2, cnt) - 1);
}
 
// Driver code
public static void Main(String []args)
{
    int []arr = { 1, 2, 1, 2 };
    int n = arr.Length;
 
    Console.WriteLine(cntSubSets(arr, n));
}
}
 
// This code is contributed by 29AjayKumar


Javascript


输出:
3

时间复杂度: O(n)