给定一个大小为 N 的数组,找出多数元素。多数元素是出现次数超过给定数组中的次数。
例子:
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 现场工作专业课程和学生竞争性编程现场课程。