思路:
维护一个当前递增子序列的长度maxLen,通过比较当前 i -> i+maxLen-1,从后往前进行比较,
若发现存在非递增,则i可以调到j+1的位置,当前maxLen不变,
若i -> i+maxLen-1满足递增,则对i进行跳到i+maxLen-1处,继续往后搜索元素(i++,maxLen++),
结果返回二元组{i-maxLen+1, i};
//
// main.cpp
// LongestContinueAscendSeri
//
// Created by pang stongan on 6/9/15.
// Copyright (c) 2015 pang stongan. All rights reserved.
//
#include <iostream>
#include <vector>
using namespace std;
pair<int, int> getFun(vector<int> vec) {
int maxLen = 1;
pair<int, int> ans(0, 0);
int n = vec.size();
int i = 0;
while(i < n){
bool skip = false;
int j;
for(j = i + maxLen - 1; j >= i; j--){
if(vec[j] >= vec[j+1]){ //vec[j] < vec[j-1]
skip = true;
i = j+1;
break;
}
}
if(skip == false){
i += maxLen - 1;
while(i+1 < n && vec[i] < vec[i+1]){
++i;
++maxLen;
}
ans = {i-maxLen+1, i};
// for(i = j; i < n-1; ){
// if(vec[i] < vec[i+1]){
// i++;
// maxLen++;
// } else {
// break;
// }
// }
}
}
return ans;
}
int main(int argc, const char * argv[]) {
// insert code here...
int A[]={2, 13, 6, 8, 9, 1};
vector<int> vec(A, A+6);
pair<int, int> ret = getFun(vec);
std::cout <<ret.first <<"\t" <<ret.second <<endl;
return 0;
}