首页 > 其他 > 详细

leetcode小白刷题之旅----674. Longest Continuous Increasing Subsequence

时间:2021-01-24 14:31:45      阅读:39      评论:0      收藏:0      [点我收藏+]

仅供自己学习

 

题目:

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 };

 

leetcode小白刷题之旅----674. Longest Continuous Increasing Subsequence

原文:https://www.cnblogs.com/Mrsdwang/p/14320424.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!