给定大小为N的数组arr [] ,任务是查找数组元素的平均值而不会发生溢出。
例子:
Input: arr[] = { INT_MAX, INT_MAX }
Output:
Average by Standard method: -1.0000000000
Average by Efficient method: 2147483647.0000000000
Explanation:
The average of the two numbers by standard method is (sum / 2).
Since the sum of the two numbers exceed INT_MAX, the obtained output by standard method is incorrect.
Input: arr[] = { INT_MAX, 1, 2 }
Output:
Average by Standard method: -715827882.0000000000
Average by Efficient method: 715827883.3333332539
方法:可以根据以下观察结果解决给定问题:
- N个数组元素的平均值可以通过将数组元素的总和除以N来获得。但是,如果数组包含大整数,则计算数组arr []的总和可能会导致整数溢出。
- 因此,可以通过以下步骤有效地计算数组的平均值:
- 使用索引范围为[0,N – 1]的变量i遍历数组
- 更新平均=(平均+(arr [i] –平均)/(i + 1))
请按照以下步骤解决问题:
- 初始化两个变量,例如sum为0和avg为0 ,分别存储数组元素的和和平均值。
- 遍历数组arr [],更新avg = avg +(arr [i] – avg)/(i +1),并更新sum = sum + arr [i]。
- 完成上述步骤后,通过标准方法(即sum / N)打印平均值,并通过有效方法(即avg)打印平均值
下面是上述方法的实现:
C++
Java
Python3
C#
输出:
时间复杂度: O(N)
辅助空间: O(1)