Problem url:
https://www.hackerrank.com/challenges/migratory-birds/problem
Solution:
Results are generated in O(1) while traversing an array. We need to keep track of the largest value and keep a record of the smallest key.
func migratoryBirds(arr []int32) int32 {
//key value
m := make(map[int32]int32)
largest := int32(0)
largestKey := int32(0)
for _, key := range arr {
c := incrementKey(key, m)
if (largest < c) {
largest = c
largestKey = key
fmt.Println(largest, largestKey)
} else if (largest == c) {
//compare keys
if (largestKey > key){
largestKey = key
}
}
}
fmt.Println(largest)
return largestKey
}
func incrementKey(k int32, m map[int32]int32) int32 {
if _, ok := m[k]; ok {
m[k] += 1
} else {
m[k] = 1
}
return m[k]
}