intpivotIndex(vector<int>& nums){int n = nums.size();
vector<int>dp(n);
dp[0]= nums[0];for(int i =1; i < n;++i){
dp[i]= nums[i]+ dp[i-1];}if(dp[n-1]- dp[0]==0)return0;for(int i =1; i < n;++i){if(dp[i-1]== dp[n-1]- dp[i])return i;}return-1;}
// 1.同余定理: 如果 (a - b) / p = k ... 0 则推出 a % p = b % p// 2.因为 负 % 正 = 负, 所以为兼顾取模结果的正负性, 使用 (a % p + p) % p 做修正
unordered_map<int,int> hash;// <前缀和sum的余数, 次数>intsubarraysDivByK(vector<int>& nums,int k){
hash[0]=1;int sum =0, ret =0;for(int e : nums){
sum += e;int r =(sum % k + k)% k;// 修正后的余数if(hash.count(r)) ret += hash[r];
hash[r]++;}return ret;}
// 转化:将所有的0改为-1, 转化为寻找和为0的最长子数组
unordered_map<int,int> hash;// <前缀和, 下标>intfindMaxLength(vector<int>& nums){for(int& e : nums)if(e ==0) e =-1;
hash[0]=-1;int sum =0, len =0;for(int i =0; i < nums.size();++i){
sum += nums[i];if(hash.count(sum)) len =max(len, i - hash[sum]);else hash[sum]= i;}return len;}