vector<int> continuousSubarraySumII(vector<int>& A) {
        int ans1;
        vector<int>  vec1 = continuousSubarraySum(A, ans1);
        // 如果ans1 < 0 的话,说明全是复数,
		// 直接返回vec1就可以了,不需要再继续了。
        if(ans1 < 0) return vec1;
		
        int n = A.size();
        if(n <= 2) return vec1;
        
        int ans2;
		// 计算最小连续子数组
        vector<int>  vec2 = continuousSubarraySum1(A, ans2);
        int sum = accumulate(A.begin(), A.end(), 0);
		// 总和减去连续最小子数组,就是连续旋转子数组的最大和
        ans2 = sum - ans2;
        // 这里的>= 不能少了等于号,等于的情况下,也要返回不旋转的才对
        if(ans1 >= ans2) return vec1;
        --vec2[0];
        ++vec2[1];
        swap(vec2[0], vec2[1]);
        return vec2;
    }
 /**
  * @param A an integer array
  * @return  A list of integers includes the index of 
  *          the first number and the index of the last number
  */
 vector<int> continuousSubarraySumII(vector<int>& A) {
     int msum1;
     vector<int> ans1;
     ans1 = continuousSubarraySum(A, msum1);
     if (ans1[0] == ans1[1]) {
         return ans1;
     }
     
     vector<int> s1;
     vector<int> i1;
     vector<int> s2;
     vector<int> i2;
     
     int n = A.size();
     int i;
     int sum;
     
     s1.resize(n);
     i1.resize(n);
     s2.resize(n);
     i2.resize(n);
     
     sum = A[0];
     s1[0] = A[0];
     i1[0] = 0;
     for (i = 1; i <= n - 1; ++i) {
         sum += A[i];
         if (sum > s1[i - 1]) {
             s1[i] = sum;
             i1[i] = i;
         } else {
             s1[i] = s1[i - 1];
             i1[i] = i1[i - 1];
         }
     }
     
     sum = A[n - 1];
     s2[n - 1] = A[n - 1];
     i2[n - 1] = n - 1;
     for (i = n - 2; i >= 0; --i) {
         sum += A[i];
         if (sum > s2[i + 1]) {
             s2[i] = sum;
             i2[i] = i;
         } else {
             s2[i] = s2[i + 1];
             i2[i] = i2[i + 1];
         }
     }
     
     int msum2 = 0;
     vector<int> ans2;
     ans2.resize(2);
     for (i = 0; i < n - 1; ++i) {
         if (s1[i] + s2[i + 1] > msum2) {
             msum2 = s1[i] + s2[i + 1];
             ans2[0] = i2[i + 1];
             ans2[1] = i1[i];
         }
     }
     return msum1 > msum2 ? ans1 : ans2;
 }