标签:10 last nums 674 小白刷题 Continuous int maxlen left
仅供自己学习
题目:
Given an unsorted array of integers nums, return the length of the longest continuous increasing subsequence (i.e. subarray). The subsequence must be strictly increasing.
A continuous increasing subsequence is defined by two indices l and r (l < r) such that it is [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] and for each l <= i < r, nums[i] < nums[i + 1].
思路:
1.之前写过的 编号为3,求最长子串长度的题学到了一个滑动窗口的算法。看到这题 感觉比较类似也可以使用。但是存在一点差别,我用到unordered_map <int,int> m是以nums[ i ]为key和value,并且创建一个last用来比较是否为递增,其值为子数列最右元素的前一个元素。因为题目给出的数据范围是 -10^9 到10^9 ,为了保证第一个元素为最小值时也能正确比较,将m[last]=-10^10即可。其余与滑动窗口算法相同,当不为递增后,就移动left到右tag所指位置的前一个元素的位置,长度仍可用 i-left获得。
代码:
1 class Solution { 2 public: 3 int findLengthOfLCIS(vector<int>& nums) { 4 unordered_map <int,int> m; 5 int left=-1,last=-1; 6 int maxlen=0; 7 m[last]=-1000000000; 8 for(int i=0;i<nums.size();) 9 { 10 m[nums[i]] = nums[i]; 11 if(m[nums[i]]>m[last] ) 12 { 13 maxlen=max(maxlen,i-left); 14 last = nums[i++]; 15 } 16 else 17 { 18 left=i-1; 19 last = nums[i++]; 20 } 21 22 } 23 return maxlen; 24 } 25 };
标签:10,last,nums,674,小白刷题,Continuous,int,maxlen,left 来源: https://www.cnblogs.com/Mrsdwang/p/14320424.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。