📜  多数元素 | Set-2(散列)

📅  最后修改于: 2021-10-27 08:59:38             🧑  作者: 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


Javascript


输出:
2

以下是上述算法的时间和空间复杂度:-
时间复杂度:O(n)
辅助空间:O(n)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程