同時維護當前下標的數組的最大值和最小值即可。
class Solution {
public:
int maxAbsoluteSum(vector<int>& nums) {
int n = nums.size();
if(n==0) return 0;
vector<int> maxSum(n);
vector<int> minSum(n);
int res = abs(nums[0]);
maxSum[0] = nums[0], minSum[0] = nums[0];
for(int i=1;i<n;i++){
maxSum[i] = max(nums[i],maxSum[i-1]+nums[i]);
minSum[i] = min(nums[i],minSum[i-1]+nums[i]);
res = max(res,max(abs(maxSum[i]),abs(minSum[i])));
}
return res;
}
};
純模擬題目
class Solution {
public:
int minimumLength(string s) {
int i = 0, j = s.size()-1;
while(i<j&&s[i]==s[j]){
while(i+1<j&&s[i]==s[i+1]) i++;
while(j-1>i&&s[j]==s[j-1]) j--;
i++;
j--;
}
return j-i+1;
}
};