C++程序 计算机领域最大平衡和
给定一个数组arr[],找到索引i中前缀和和后缀和的最大值。
例子:
使用 简单解决方案 一个一个地检查每个元素是否满足给定条件(前缀和等于后缀和),并返回满足给定条件且具有最大值的元素。
输出:
时间复杂度: O(n 2 )
辅助空间: O(n)
使用 更好的方法 遍历数组并将每个索引的前缀和存储在数组presum[]中,其中presum[i]存储子数组arr[0..i]的总和。对数组进行另一个遍历,并在另一个数组suffsum[]中存储后缀和,其中suffsum[i]存储子数组arr[i..n-1]的总和。此后,对于每个索引检查presum[i]是否等于suffsum[i],如果它们相等,则将其值与迄今为止的最大值进行比较。
输出:
时间复杂度: O(n)
辅助空间: O(n)
进一步优化:
我们可以通过首先计算总和,然后使用它来找到当前前缀和和后缀和来避免使用额外的空间。
输出:
时间复杂度: O(n)
辅助空间: O(1)