Given an unsorted array of integers, find the length of longest continuous
increasing subsequence (subarray).
给定一个未排序的整数数组,找到最长的连续递增子序列,返回其长度
Example 1:
Input: [1,3,5,4,7]
Output: 3
Explanation: The longest continuous increasing subsequence is [1,3,5], its length is 3.
Even though [1,3,5,7] is also an increasing subsequence, it's not a continuous one where 5 and 7 are separated by 4.
Example 2:
Input: [2,2,2,2,2]
Output: 1
Explanation: The longest continuous increasing subsequence is [2], its length is 1.
Note:
Length of the array will not exceed 10,000.
Solutions:
Python
'''
方法1是leetcode最快算法,算法2是自己想到的算法,其实思路都一样,自己想的麻烦了一些,可以用方法1优化
算法的主要思想就是比较当前数是否小于下一个数,如果小于则进行计数,count++,并同时更新maxcount,
否则count置1,最终返回maxcount,由于maxcount最小是1,所以还需要考虑nums为空的情形,单独返回0即可
'''
(1)
class Solution:
def findLengthOfLCIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return 0
maxLen = 1
curLen = 1
for i in range(1,len(nums)):
if nums[i] > nums[i-1]:
curLen += 1
if curLen > maxLen:
maxLen = curLen
else:
curLen = 1
return maxLen
(2)
'''
感觉自己改进上面的代码应该运行速度比上面更快,事实却并没有,
leetcode的计时有的时候也有些问题,
总之算法思路完全一样
'''
class Solution:
def findLengthOfLCIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return 0
maxLen = 1
curLen = 1
for i in range(1,len(nums)):
if nums[i] > nums[i-1]:
curLen += 1
else:
if curLen > maxLen:
maxLen = curLen
curLen = 1
if curLen > maxLen:
maxLen = curLen
return maxLen
(3)
class Solution:
def findLengthOfLCIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) ==0:
return 0
start = 0
end = 0
length = 0
temp = nums[0]
for i in range(1,len(nums)):
if nums[i] > temp:
end = i
temp = nums[i]
else:
if end-start + 1 > length:
length = end - start + 1
start = i
temp = nums[i]
if end - start +1 > length:
length = end - start + 1
return length
C++
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
if (nums.size() == 0){
return 0;
}
int curlen = 1;
int maxlen = 1;
for (int i = 1;i<nums.size();i++){
if (nums[i]>nums[i-1]){
curlen ++;
}
else{
if (curlen>maxlen){
maxlen = curlen;
}
curlen = 1;
}
}
if (curlen>maxlen){
maxlen = curlen;
}
return maxlen;
}
};