题解 | #牛牛的数列#
牛牛的数列
http://www.nowcoder.com/practice/f2419f68541d499f920eac51c63d3f72
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums intvector * @return int */ int maxSubArrayLength(vector<int>& nums) { // write code here int n = nums.size(); vector<int> heads(n, 1); //以i为头的最长递增子序列长度 vector<int> tails(n, 1); //以i为尾的最长递增子序列长度 for(int i = 1; i < n; i ++){ if(nums[i] > nums[i - 1]) tails[i] = tails[i - 1] + 1; } for(int i = n - 2; i >= 0; i --){ if(nums[i + 1] > nums[i]) heads[i] = heads[i + 1] + 1; } int ans = 1; for(int i = 0; i < n; i ++){ ans = max({heads[i], tails[i], ans}); if(i > 0 && nums[i - 1] >= nums[i]) ans = max(ans, tails[i - 1] + 1); if(i + 1 < n && nums[i] >= nums[i + 1] && nums[i] > 1) ans = max(ans, heads[i + 1] + 1); //需要改成一个正整数 if(i + 1 < n && i - 1 >= 0 && nums[i + 1] - nums[i - 1] >= 2) ans = max(ans, heads[i + 1] + tails[i - 1] + 1); } return ans; } };