leetcode 1991 找到数组的中间位置

54 阅读1分钟

开始刷题了,用 c++玩玩,丰富下语言的使用经验。

image.png

class Solution {
public:
  int findMiddleIndex(vector<int>& nums) {
    int total = accumulate(nums.begin(), nums.end(), 0);
    int sum = 0;

    for (int i = 0; i < nums.size(); ++i) {
      if (2 * sum + nums[i] == total) {
        return i;
      }
      sum += nums[i];
    }
    return -1;
  }
};

使用的是前缀和的方法,维护一个 sum 变量,如果 sum 变量,相当于中间下标,左/右边全部的和,如果 sum * 2 + 中间那个数等于总量的话,那就说明找到了中间下标