Suma de elementos en posiciones dadas
Definir la función
1 |
sumaEnPosicion :: [Int] -> [Int] -> Int |
tal que (sumaEnPosicion xs ys) es la suma de todos los elementos de xs cuyas posiciones se indican en ys. Por ejemplo,
1 2 3 |
sumaEnPosicion [1,2,3] [0,2] == 4 sumaEnPosicion [4,6,2] [1,3] == 6 sumaEnPosicion [3,5,1] [0,1] == 8 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 |
-- 1ª solución sumaEnPosicion1 :: [Int] -> [Int] -> Int sumaEnPosicion1 xs ys = sum [xs !! y | y <- ys, 0 <= y, y < n] where n = length xs -- 2ª solución sumaEnPosicion2 :: [Int] -> [Int] -> Int sumaEnPosicion2 xs ys = aux xs [y | y <- ys, 0 <= y, y < n] 0 where n = length xs aux _ [] r = r aux xs (y:ys) r = aux xs ys (r + xs!!y) |
Esta solución se puede mejorar eliminando el primer generador x<-xs, tal y como propone, por ejemplo, Chema Cortés en su definición.
O(n * max({m}))
O(n * m)
O((n + m) log n)
O((n + m) log m)