📜  找出频率最高为数字K的数组元素

📅  最后修改于: 2021-05-14 02:24:28             🧑  作者: Mango

给定大小为N且整数K的数组arr [] ,任务是找到一个包含最大位数K的数组元素。如果存在多个解决方案,则打印其中任何一种。否则,打印-1

例子:

方法:想法是遍历数组,对于每个单独的数组元素,计算数字K在其中的出现次数。请按照以下步骤解决问题:

  1. 将数字K的最大频率(例如maxfreq)初始化为0
  2. 从开始元素到结束遍历给定的数组。
  3. 对于每个遍历的元素,找到该元素中数字K的频率。如果大于maxfreq ,则更新maxfreq并存储该元素。

下面是上述方法的实现:

C++
// C++ program for the above approach
 
#include 
using namespace std;
 
// Function to find the count of
// digits, k in the given number n
int countFreq(int N, int K)
{
 
    // Stores count of occurrence
    // of digit K in N
    int count = 0;
 
    // Iterate over digits of N
    while (N > 0) {
 
        // If current digit is k
        if (N % 10 == K) {
 
            // Update count
            count++;
        }
 
        // Update N
        N = N / 10;
    }
    return count;
}
 
// Utility function to find an array element
// having maximum frequency of digit k
int findElementUtil(int arr[], int N, int K)
{
 
    // Stores frequency of
    // digit K in arr[i]
    int c;
 
    // Stores maximum frequency of
    // digit K in the array
    int max;
 
    // Stores an array element having
    // maximum frequency of digit k
    int ele;
 
    // Initialize max
    max = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++) {
 
        // Count the frequency of
        // digit k in arr[i]
        c = countFreq(arr[i], K);
 
        // Update max with maximum
        // frequency found so far
        if (c > max) {
            max = c;
 
            // Update ele
            ele = arr[i];
        }
    }
 
    // If there is no array element
    // having digit k in it
    if (max == 0)
        return -1;
    else
        return ele;
}
 
// Function to find an array element
// having maximum frequency of digit k
void findElement(int arr[], int N, int K)
{
 
    // Stores an array element having
    // maximum frequency of digit k
    int ele = findElementUtil(arr, N, K);
 
    // If there is no element found
    // having digit k in it
    if (ele == -1)
        cout << "-1";
 
    else
 
        // Print the element having max
        // frequency of digit k
        cout << ele;
}
 
// Driver Code
int main()
{
 
    // The digit whose max
    // occurrence has to be found
    int K = 3;
 
    // Given array
    int arr[] = { 3, 77, 343, 456 };
 
    // Size of array
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Function Call
    findElement(arr, K, N);
 
    return 0;
}


Java
// Java program for the above approach
class GFG {
     
    // Function to find the count of
    // digits, k in the given number n
    static int countFreq(int N, int K)
    {
     
        // Stores count of occurrence
        // of digit K in N
        int count = 0;
     
        // Iterate over digits of N
        while (N > 0)
        {
     
            // If current digit is k
            if (N % 10 == K)
            {
     
                // Update count
                count++;
            }
     
            // Update N
            N = N / 10;
        }
        return count;
    }
     
    // Utility function to find an array element
    // having maximum frequency of digit k
    static int findElementUtil(int arr[], int N, int K)
    {
     
        // Stores frequency of
        // digit K in arr[i]
        int c;
     
        // Stores maximum frequency of
        // digit K in the array
        int max;
     
        // Stores an array element having
        // maximum frequency of digit k
        int ele = 0;
     
        // Initialize max
        max = 0;
     
        // Traverse the array
        for (int i = 0; i < N; i++)
        {
     
            // Count the frequency of
            // digit k in arr[i]
            c = countFreq(arr[i], K);
     
            // Update max with maximum
            // frequency found so far
            if (c > max)
            {
                max = c;
     
                // Update ele
                ele = arr[i];
            }
        }
     
        // If there is no array element
        // having digit k in it
        if (max == 0)
            return -1;
        else
            return ele;
    }
     
    // Function to find an array element
    // having maximum frequency of digit k
    static void findElement(int arr[], int N, int K)
    {
     
        // Stores an array element having
        // maximum frequency of digit k
        int ele = findElementUtil(arr, N, K);
     
        // If there is no element found
        // having digit k in it
        if (ele == -1)
            System.out.print("-1");
     
        else
     
            // Print the element having max
            // frequency of digit k
            System.out.print(ele);
    }
     
    // Driver Code
    public static void main (String[] args)
    {
     
        // The digit whose max
        // occurrence has to be found
        int K = 3;
     
        // Given array
        int arr[] = { 3, 77, 343, 456 };
     
        // Size of array
        int N = arr.length;
     
        // Function Call
        findElement(arr, K, N);  
    }
}
 
// This code is contributed by AnkThon


Python3
# Python3 program for the above approach
 
# Function to find the count of
# digits, k in the given number n
def countFreq(N, K):
 
    # Stores count of occurrence
    # of digit K in N
    count = 0
 
    # Iterate over digits of N
    while (N > 0):
 
        # If current digit is k
        if (N % 10 == K):
 
            # Update count
            count += 1
 
        # Update N
        N = N // 10
    return count
 
# Utility function to find an array element
# having maximum frequency of digit k
def findElementUtil(arr, N, K):
 
    # Stores frequency of
    # digit K in arr[i]
    c  = 0
 
    # Stores maximum frequency of
    # digit K in the array
    max = 0
 
    # Stores an array element having
    # maximum frequency of digit k
    ele = 0
 
    # Initialize max
    # max = 0
 
    # Traverse the array
    for i in range(N):
 
        # Count the frequency of
        # digit k in arr[i]
        c = countFreq(arr[i], K)
 
        # Update max with maximum
        # frequency found so far
        if (c > max):
            max = c
 
            # Update ele
            ele = arr[i]
 
    # If there is no array element
    # having digit k in it
    if (max == 0):
        return -1
    else:
        return ele
 
# Function to find an array element
# having maximum frequency of digit k
def findElement(arr, N, K):
 
    # Stores an array element having
    # maximum frequency of digit k
    ele = findElementUtil(arr, N, K)
 
    # If there is no element found
    # having digit k in it
    if (ele == -1):
        print("-1", end = "")
 
    else:
 
        # Prthe element having max
        # frequency of digit k
        print(ele)
 
# Driver Code
if __name__ == '__main__':
 
    # The digit whose max
    # occurrence has to be found
    K = 3
 
    # Given array
    arr = [3, 77, 343, 456]
 
    # Size of array
    N = len(arr)
 
    # Function Call
    findElement(arr, K, N)
 
# This code is contributed by mohit kumar 29


C#
// C# program for the above approach
using System;
 
class GFG {
 
  // Function to find the count of
  // digits, k in the given number n
  static int countFreq(int N, int K)
  {
 
    // Stores count of occurrence
    // of digit K in N
    int count = 0;
 
    // Iterate over digits of N
    while (N > 0)
    {
 
      // If current digit is k
      if (N % 10 == K)
      {
 
        // Update count
        count++;
      }
 
      // Update N
      N = N / 10;
    }
    return count;
  }
 
  // Utility function to find an array element
  // having maximum frequency of digit k
  static int findElementUtil(int []arr, int N, int K)
  {
 
    // Stores frequency of
    // digit K in arr[i]
    int c;
 
    // Stores maximum frequency of
    // digit K in the array
    int max;
 
    // Stores an array element having
    // maximum frequency of digit k
    int ele = 0;
 
    // Initialize max
    max = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
 
      // Count the frequency of
      // digit k in arr[i]
      c = countFreq(arr[i], K);
 
      // Update max with maximum
      // frequency found so far
      if (c > max)
      {
        max = c;
 
        // Update ele
        ele = arr[i];
      }
    }
 
    // If there is no array element
    // having digit k in it
    if (max == 0)
      return -1;
    else
      return ele;
  }
 
  // Function to find an array element
  // having maximum frequency of digit k
  static void findElement(int []arr, int N, int K)
  {
 
    // Stores an array element having
    // maximum frequency of digit k
    int ele = findElementUtil(arr, N, K);
 
    // If there is no element found
    // having digit k in it
    if (ele == -1)
      Console.Write("-1");
 
    else
 
      // Print the element having max
      // frequency of digit k
      Console.Write(ele);
  }
 
  // Driver Code
  public static void Main(String[] args)
  {
 
    // The digit whose max
    // occurrence has to be found
    int K = 3;
 
    // Given array
    int []arr = { 3, 77, 343, 456 };
 
    // Size of array
    int N = arr.Length;
 
    // Function Call
    findElement(arr, K, N);  
  }
}
 
// This code is contributed by 29AjayKumar


输出:
343

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