Facebook Interview Question
SDE-3sCountry: United States
class StreamAverageCalculator {
private Double average = 0.0;
AtomicInteger count = new AtomicInteger();
private void addToAverage(Double num) {
Double number = new Double (count.incrementAndGet());
Double delta = (num - average) / number;
average += delta;
}
StreamAverageCalculator (Stream<Double> streamOfNumbers) {
if (streamOfNumbers == null) {
// throw Exception
} else {
streamOfNumbers.forEach(x -> addToAverage(x));
}
}
public Double getAverage() {
return average;
}
}
public class AverageStream {
private long[] stream;
private double average = 0;
// constructor
AverageStream(long[] input) {
stream = input;
}
// calculate average
void setAverage() {
long sum = 0;
for (int i = 0; i < stream.length; i++) {
// in case of overflow, set zero
if (isOverflow(sum)) {
sum = 0;
average = 0;
return;
}
sum += stream[i];
}
average = (sum/stream.length);
}
double getAverage() {
return average;
}
boolean isOverflow(long in) {
if (in >= -0x7FFFFFFF && in <= 0x7FFFFFFF)
return false;
else
return true;
}
}
average' = average + (new_value - average)/(n+1)
- aasimon@uc.cl August 11, 2018