18
1
let multiplyOthers (input : int[]) =
2
let front = Array.zeroCreate input.Length
3
let rear = Array.zeroCreate input.Length
4
front.[0] <- 1
5
rear.[input.Length-1] <- 1
6
7
for i = 1 to input.Length-1 do
8
front.[i] <- front.[i-1] * input.[i-1]
9
10
// start from second to last element
11
for i in input.Length-2 .. -1 .. 0 do
12
rear.[i] <- rear.[i+1] * input.[i+1]
13
14
Seq.zip front rear
15
|> Seq.map (fun (f, r) -> f * r)
16
|> Seq.toArray
17
18
multiplyOthers [| 2;3;1;4|] |> printfn "%A"
[|12; 8; 24; 6|]