地址:

5643. 将数组分成三个子数组的方案数

状态:未AC

代码:三指针,看的头疼

  1. typedef long long ll;
  2. const ll MOD = 1e9+7;
  3. class Solution {
  4. public:
  5. int waysToSplit(vector<int>& nums) {
  6. int n = nums.size();
  7. ll res = 0;
  8. vector<int> s(n+1);
  9. for(int i=1; i<=n; i++) s[i] = s[i-1] + nums[i-1];
  10. for(int i=3, x=2, y=2; i<=n; i++){
  11. while(s[n] - s[i-1] < s[i-1] - s[x-1])
  12. x++;
  13. while(y+1 < i && s[i-1] - s[y] >= s[y])
  14. y++;
  15. if(x<=y && s[n] - s[i-1] >= s[i-1] - s[y-1] && s[i-1] - s[x-1] >= s[x-1])
  16. res = (res + y-x+1) % MOD;
  17. }
  18. return res;
  19. }
  20. };