算法必刷 100 题:寻找数组中心下标与除自身以外乘积
前缀和是解决累积计算类问题的经典技巧。今天我们来梳理两道高频面试题,它们都可以通过优化空间复杂度的方式高效求解。
027 寻找数组的中心下标
题目描述: 给定一个整数数组 nums,找到索引 index,使得该索引左侧元素之和等于右侧元素之和。如果不存在这样的索引,返回 -1。
算法思路
核心在于利用总和与前缀和的关系。假设当前索引为 i,左侧和为 leftSum,右侧和即为 totalSum - leftSum - nums[i]。当两者相等时,即找到答案。 这种方法只需遍历两次数组(一次求和,一次查找),无需额外存储左右和数组,将空间复杂度降至 O(1)。
算法实现
C++ 实现
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int totalSum = 0;
for (int num : nums) totalSum += num;
int leftSum = 0;
for (int i = 0; i < nums.size(); ++i) {
if (leftSum == totalSum - leftSum - nums[i]) {
return i;
}
leftSum += nums[i];
}
return -1;
}
};
时间复杂度:O(n),空间复杂度:O(1)。
Java 实现
class Solution {
public int pivotIndex(int[] nums) {
int totalSum = 0;
for (int num : nums) totalSum += num;
;
( ; i < nums.length; ++i) {
(leftSum == totalSum - leftSum - nums[i]) {
i;
}
leftSum += nums[i];
}
-;
}
}


