A friend of mine is interviewing for a job. One of the interview questions got me thinking, just wanted some feedback.
There are 2 non-negative integers: i and j. Gi
This is very easy to do O(n)
in functional languages. The list l
of 2^i*5^j
numbers can be simply defined as 1
and then 2*l
and 5*l
merged. Here is how it looks in Haskell:
merge :: [Integer] -> [Integer] -> [Integer]
merge (a:as) (b:bs)
| a < b = a : (merge as (b:bs))
| a == b = a : (merge as bs)
| b > a = b : (merge (a:as) bs)
xs :: [Integer]
xs = 1 : merge (map(2*)xs) (map(5*)xs)
The merge
function gives you a new value in constant time. So does map
and hence so does l
.