diff options
| author | Pavel Kuptsov <pavel@kuptsov.info> | 2020-08-17 16:50:35 +0300 |
|---|---|---|
| committer | Pavel Kuptsov <pavel@kuptsov.info> | 2020-08-17 16:50:35 +0300 |
| commit | 369e3fb38abf3ee3e2dbde3ad919591d6004a390 (patch) | |
| tree | e03fdcd7fe99194b5f1be74dd166a321c39850b8 | |
| parent | 74729414de38358703031df835ee4e5bb25f9731 (diff) | |
| download | perlweeklychallenge-club-369e3fb38abf3ee3e2dbde3ad919591d6004a390.tar.gz perlweeklychallenge-club-369e3fb38abf3ee3e2dbde3ad919591d6004a390.tar.bz2 perlweeklychallenge-club-369e3fb38abf3ee3e2dbde3ad919591d6004a390.zip | |
Add solution for Task-1 at Ch-074
| -rw-r--r-- | challenge-074/pavel_kuptsov/perl/ch-1.pl | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/challenge-074/pavel_kuptsov/perl/ch-1.pl b/challenge-074/pavel_kuptsov/perl/ch-1.pl new file mode 100644 index 0000000000..c9a66cb4a5 --- /dev/null +++ b/challenge-074/pavel_kuptsov/perl/ch-1.pl @@ -0,0 +1,39 @@ +#!/usr/bin/perl -w +use strict; +use warnings; +use v5.26; +use Test::More; +use POSIX qw(floor); +# TASK #1 › Majority Element +# Submitted by: Mohammad S Anwar +# You are given an array of integers of size $N. + +# Write a script to find the majority element. If none found then print -1. + +# Majority element in the list is the one that appears more than floor(size_of_list/2). + +# Example 1 +# Input: @A = (1, 2, 2, 3, 2, 4, 2) +# Output: 2, as 2 appears 4 times in the list which is more than floor(7/2). + +# Example 2 +# Input: @A = (1, 3, 1, 2, 4, 5) +# Output: -1 as none of the elements appears more than floor(6/2). + +my @A = (1, 2, 2, 3, 2, 4, 2); +my @B = (1, 3, 1, 2, 4, 5); + +sub majority_el +{ + my $arr_ref = shift; + my $o = {}; + map { $o->{$_}++ } @$arr_ref; + my ($max) = sort { $o->{$b} <=> $o->{$a} } keys %$o; + + return $o->{$max} >= floor(@$arr_ref/2) ? $max : -1; +} + +ok(majority_el(\@A) == 2 ); +ok(majority_el(\@B) == -1); + +done_testing(2);
\ No newline at end of file |
