📜  多数元素|设置2(散列)

📅  最后修改于: 2021-05-06 21:12:33             🧑  作者: Mango

给定大小为N的数组,找到多数元素。多数元素是出现的元素多于\floor{\frac{n}{2}}给定数组中的时间。

例子:

Input: [3, 2, 3]
Output: 3

Input: [2, 2, 1, 1, 1, 2, 2]
Output: 2

在上一篇文章中使用4种不同的方法解决了该问题。在这篇文章中,实现了基于哈希的解决方案。我们计算所有元素的出现。如果任何元素的计数大于n / 2,我们将其返回。

因此,如果存在多数元素,则将是键的值。

下面是上述方法的实现:

C++
#include
using namespace std;
  
#define ll long long int
  
// function to print the majority Number
int majorityNumber(int arr[], int n)
{
    int ans = -1;
    unordered_mapfreq;
    for (int i = 0; i < n; i++)
    {
        freq[arr[i]]++;
        if (freq[arr[i]] > n / 2)
            ans = arr[i];
    }
    return ans;
} 
  
// Driver code
int main()
{
    int a[] = {2, 2, 1, 1, 1, 2, 2};
    int n = sizeof(a) / sizeof(int);
    cout << majorityNumber(a, n); 
    return 0;
}
  
// This code is contributed 
// by sahishelangia


Java
import java.util.*;
  
class GFG 
{
  
// function to print the majority Number
static int majorityNumber(int arr[], int n)
{
    int ans = -1;
    HashMap freq = new HashMap();
                                          
    for (int i = 0; i < n; i++)
    {
        if(freq.containsKey(arr[i]))
        {
            freq.put(arr[i], freq.get(arr[i]) + 1);
        }
        else
        {
            freq.put(arr[i], 1);
        }
        if (freq.get(arr[i]) > n / 2)
            ans = arr[i];
    }
    return ans;
} 
  
// Driver code
public static void main(String[] args) 
{
    int a[] = {2, 2, 1, 1, 1, 2, 2};
    int n = a.length;
    System.out.println(majorityNumber(a, n));
}
} 
  
// This code is contributed by Princi Singh


Python
# function to print the 
# majorityNumber
def majorityNumber(nums):
      
    # stores the num count 
    num_count = {}
      
    # iterate in the array 
    for num in nums:
          
        if num in num_count:
            num_count[num] += 1
        else:
            num_count[num] = 1
  
    for num in num_count:
        if num_count[num] > len(nums)/2:
            return num
    return -1
  
# Driver Code
a = [2, 2, 1, 1, 1, 2, 2]
print majorityNumber(a)


C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
      
class GFG 
{
  
// function to print the majority Number
static int majorityNumber(int []arr, int n)
{
    int ans = -1;
    Dictionary freq = new Dictionary();
                                          
    for (int i = 0; i < n; i++)
    {
        if(freq.ContainsKey(arr[i]))
        {
            freq[arr[i]] = freq[arr[i]] + 1;
        }
        else
        {
            freq.Add(arr[i], 1);
        }
        if (freq[arr[i]] > n / 2)
            ans = arr[i];
    }
    return ans;
} 
  
// Driver code
public static void Main(String[] args) 
{
    int []a = {2, 2, 1, 1, 1, 2, 2};
    int n = a.Length;
    Console.WriteLine(majorityNumber(a, n));
}
}
  
// This code is contributed by Rajput-Ji


输出:
2

以下是上述算法的时间和空间复杂度:-

时间复杂度:O(n)
辅助空间:O(n)