假定正在从数据流中读取整数。寻找模式 从第一个整数到最后一个整数,到目前为止读取的所有元素的总数。
Mode is defined as the element which occurs the maximum time. If two or more elements have the same maximum frequency, then take the one with the last occurrence.
例子:
Input: stream[] = {2, 7, 3, 2, 5}
Output: 2 7 3 2 2
Explanation:
Mode of Running Stream is computed as follows:
Mode({2}) = 2
Mode({2, 7}) = 7
Mode({2, 7, 3}) = 3
Mode({2, 7, 3, 2}) = 2
Mode({2, 7, 3, 2, 2}) = 2
Input: stream[] = {3, 5, 9, 9, 2, 3, 3, 4}
Output: 3 5 9 9 9 3 3 3
方法:想法是使用哈希图 将元素映射到其频率。在逐一读取元素时,将更新映射中元素的频率,并且还将更新模式,该模式将成为运行整数流的模式。
下面是上述方法的实现:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function that prints
// the Mode values
void findMode(int a[], int n)
{
// Map used to mp integers
// to its frequency
map mp;
// To store the maximum frequency
int max = 0;
// To store the element with
// the maximum frequency
int mode = 0;
// Loop used to read the
// elements one by one
for(int i = 0; i < n; i++)
{
// Updates the frequency of
// that element
mp[a[i]]++;
// Checks for maximum Number
// of occurrence
if (mp[a[i]] >= max)
{
// Updates the maximum frequency
max = mp[a[i]];
// Updates the Mode
mode = a[i];
}
cout << mode << " ";
}
}
// Driver Code
int main()
{
int arr[] = { 2, 7, 3, 2, 5 };
int n = sizeof(arr)/sizeof(arr[0]);
// Function call
findMode(arr, n);
return 0;
}
// This code is contributed by rutvik_56
Java
// Java implementation of the
// above approach
import java.util.*;
public class GFG {
// Function that prints
// the Mode values
public static void findMode(int[] a, int n)
{
// Map used to map integers
// to its frequency
Map map
= new HashMap<>();
// To store the maximum frequency
int max = 0;
// To store the element with
// the maximum frequency
int mode = 0;
// Loop used to read the
// elements one by one
for (int i = 0; i < n; i++) {
// Updates the frequency of
// that element
map.put(a[i],
map.getOrDefault(a[i], 0) + 1);
// Checks for maximum Number
// of occurrence
if (map.get(a[i]) >= max) {
// Updates the maximum frequency
max = map.get(a[i]);
// Updates the Mode
mode = a[i];
}
System.out.print(mode);
System.out.print(" ");
}
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 2, 7, 3, 2, 5 };
int n = arr.length;
// Function Call
findMode(arr, n);
}
}
Python3
# Python3 implementation of the
# above approach
# Function that prints
# the Mode values
def findMode(a, n):
# Map used to mp integers
# to its frequency
mp = {}
# To store the maximum frequency
max = 0
# To store the element with
# the maximum frequency
mode = 0
# Loop used to read the
# elements one by one
for i in range(n):
if a[i] in mp:
mp[a[i]] += 1
else:
mp[a[i]] = 1
# Checks for maximum Number
# of occurrence
if (mp[a[i]] >= max):
# Updates the maximum
# frequency
max = mp[a[i]]
# Updates the Mode
mode = a[i]
print(mode, end = " ")
# Driver Code
arr = [ 2, 7, 3, 2, 5 ]
n = len(arr)
# Function call
findMode(arr,n)
# This code is contributed by divyeshrabadiya07
C#
// C# implementation of the
// above approach
using System;
using System.Collections.Generic;
class GFG{
// Function that prints
// the Mode values
public static void findMode(int[] a, int n)
{
// Map used to map integers
// to its frequency
Dictionary map = new Dictionary();
// To store the maximum frequency
int max = 0;
// To store the element with
// the maximum frequency
int mode = 0;
// Loop used to read the
// elements one by one
for (int i = 0; i < n; i++)
{
// Updates the frequency of
// that element
if (map.ContainsKey(a[i]))
{
map[a[i]] = map[a[i]] + 1;
}
else
{
map.Add(a[i], 1);
}
// Checks for maximum Number
// of occurrence
if (map[a[i]] >= max)
{
// Updates the maximum frequency
max = map[a[i]];
// Updates the Mode
mode = a[i];
}
Console.Write(mode);
Console.Write(" ");
}
}
// Driver Code
public static void Main(String[] args)
{
int[] arr = {2, 7, 3, 2, 5};
int n = arr.Length;
// Function Call
findMode(arr, n);
}
}
// This code is contributed by Amit Katiyar
输出:
2 7 3 2 2
性能分析:
- 时间复杂度: O(N)
- 辅助空间: O(N)