Sum of all even frequency elements in Matrix
Last Updated :
06 Sep, 2022
Given a NxM matrix of integers containing duplicate elements. The task is to find the sum of all even occurring elements in the given matrix. That is the sum of all such elements whose frequency is even in the matrix.
Examples:
Input : mat[] = {{1, 1, 2},
{2, 3, 3},
{4, 5, 3}}
Output : 18
The even occurring elements are 1, 2 and their number
of occurrences are 2, 2 respectively. Therefore,
sum = 1+1+2+2 = 6.
Input : mat[] = {{10, 20},
{40, 40}}
Output : 80
Approach:
- Traverse the matrix and use a map to store the frequency of elements of the matrix such that the key of map is the matrix element and value is its frequency in the matrix.
- Then, traverse the map to find the frequency of elements and check if it is even, then add this element it’s frequency times to sum.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define N 3 // Rows
#define M 3 // Columns
int sumOddOccurring( int arr[N][M])
{
unordered_map< int , int > mp;
for ( int i = 0; i < N; i++) {
for ( int j = 0; j < M; j++) {
mp[arr[i][j]]++;
}
}
int sum = 0;
for ( auto itr = mp.begin(); itr != mp.end(); itr++) {
if (itr->second % 2 == 0) {
int x = itr->second;
sum += (itr->first) * (itr->second);
}
}
return sum;
}
int main()
{
int mat[N][M] = { { 1, 2, 3 },
{ 1, 3, 2 },
{ 1, 5, 6 } };
cout << sumOddOccurring(mat) << endl;
return 0;
}
|
Java
import java.util.*;
class GFG
{
static final int N = 3 ;
static final int M = 3 ;
static int sumOddOccurring( int arr[][])
{
Map<Integer,
Integer> mp = new HashMap<Integer,
Integer>();
for ( int i = 0 ; i < N; i++)
{
for ( int j = 0 ; j < M; j++)
{
if (mp.get(arr[i][j]) == null )
mp.put(arr[i][j], 1 );
else
mp.put(arr[i][j],
(mp.get(arr[i][j]) + 1 ));
}
}
int sum = 0 ;
Set< Map.Entry<Integer,
Integer> > st = mp.entrySet();
for (Map.Entry< Integer, Integer> me:st)
{
if (me.getValue() % 2 == 0 )
{
int x = me.getValue();
sum += (me.getKey()) * (me.getValue());
}
}
return sum;
}
public static void main(String args[])
{
int mat[][] = {{ 1 , 2 , 3 },
{ 1 , 3 , 2 },
{ 1 , 5 , 6 }};
System.out.print(sumOddOccurring(mat));
}
}
|
Python3
import sys
N = 3
M = 3
def sumOddOccurring(arr):
mp = dict ()
for i in range (N):
for j in range (M):
if arr[i][j] in mp:
mp[arr[i][j]] + = 1
else :
mp[arr[i][j]] = 1
s = 0
for i in mp:
if mp[i] % 2 = = 0 :
x = mp[i]
s + = i * mp[i]
return s
if __name__ = = "__main__" :
mat = [[ 1 , 2 , 3 ],
[ 1 , 3 , 2 ],
[ 1 , 5 , 6 ]]
print (sumOddOccurring(mat))
|
C#
using System;
using System.Collections.Generic;
class Sol
{
static readonly int N = 3;
static readonly int M = 3;
static int sumOddOccurring( int [,]arr)
{
Dictionary< int , int > mp = new Dictionary< int , int >();
for ( int i = 0; i < N; i++)
{
for ( int j = 0; j < M; j++)
{
if (!mp.ContainsKey(arr[i, j]))
mp.Add(arr[i, j], 1);
else {
var val = mp[arr[i, j]];
mp.Remove(arr[i, j]);
mp.Add(arr[i, j], val + 1);
}
}
}
int sum = 0;
foreach (KeyValuePair< int , int > entry in mp)
{
if (entry.Value % 2 == 0){
sum += entry.Key * entry.Value;
}
}
return sum;
}
public static void Main(String []args)
{
int [,]mat = { { 1, 2, 3 },
{ 1, 3, 2 },
{ 1, 5, 6 } };
Console.Write( sumOddOccurring(mat) );
}
}
|
Javascript
<script>
var N = 3;
var M = 3;
function sumOddOccurring(arr)
{
var mp = new Map();
for ( var i = 0; i < N; i++)
{
for ( var j = 0; j < M; j++)
{
if (!mp.has(arr[i][j]))
mp.set(arr[i][j], 1);
else {
var val = mp.get(arr[i][j]);
mp. delete (arr[i][j]);
mp.set(arr[i][j], val + 1);
}
}
}
var sum = 0;
mp.forEach((value, key) => {
if (value % 2 == 0){
sum += key * value;
}
});
return sum;
}
var mat = [[1, 2, 3 ],
[1, 3, 2 ],
[1, 5, 6 ]];
document.write( sumOddOccurring(mat) );
</script>
|
Complexity Analysis:
- Time Complexity: O(N x M)
- Auxiliary Complexity: O(N x M)
Share your thoughts in the comments
Please Login to comment...