> 文档中心 > LeetCode -前缀和专题

LeetCode -前缀和专题

文章目录

  • 一、前缀
  • 二、刷题

一、前缀和


二、刷题

LeetCode 724. 寻找数组的中心下标 原题链接

class Solution {public:    int pivotIndex(vector<int>& nums) { vector<int> sum(100010); for (int i = 0; i < nums.size(); i ++) {     sum[i] = nums[i];     if (i) {  sum[i] = sum[i - 1] + nums[i];  // 计算前缀和     } } if (sum[nums.size() - 1] - sum[0] == 0)// 考虑中心在0的情况     return 0;    for (int i = 1; i < nums.size(); i ++) {     if (sum[i - 1] == sum[nums.size() - 1] - sum[i]) // [左边部分的和]与[右边部分的和]     {  return i;     } } return -1;    }};

 
LeetCode 1480. 一维数组的动态和 原题链接

class Solution {public:    vector<int> runningSum(vector<int>& nums) { for (int i = 1; i < nums.size(); i ++) {     nums[i] = nums[i];     if (i)  nums[i] += nums[i - 1]; } return nums;    }};

 
LeetCode 1588. 所有奇数长度子数组的和 原题链接

class Solution {public:    int sumOddLengthSubarrays(vector<int>& arr) { vector<int> sum(110); int pre, ans = 0; for (int i = 0; i < arr.size(); i ++) {     sum[i] = arr[i];     if (i) sum[i] = sum[i - 1] + arr[i]; } for (int i = 1; i <= arr.size(); i += 2) {      // 奇数的长度     for (int j = i - 1; j < arr.size(); j ++) { // 以j结尾的起始位置并且长度为i的子数组  if (j - i == -1) {      pre = 0;  }else {      pre = sum[j - i];  }  ans += sum[j] - pre;     }  } return ans;    }};