版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maotianyi941005/article/details/84991888
674. Longest Continuous Increasing Subsequence(easy)
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.
涉及到连续子串问题
1 最耗时的解法O(n2) 可跳过看2
class Solution:
def findLengthOfLCIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if(len(nums) == 0): return 0
maxlen = 1
nowlen = 1
for i in range(len(nums)):
for j in range(i,len(nums)-1):
if(nums[j+1] > nums[j]):
nowlen += 1
if(nowlen > maxlen):maxlen = nowlen
else:break
nowlen = 1
return maxlen
Runtime: 468 ms, faster than 0.94% of Python3 o
2 优化:O(n),start,end标记子串
思路:用两个字段标记连续子串的开始start和结束的后一位end,下一次查找start移动到end的位置,end++
class Solution:
def findLengthOfLCIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if(len(nums) == 0): return 0
maxlen = 1
start = 0; end = 1
while(end < len(nums)):
while((end < (len(nums))) and (nums[end] > nums[end-1])):end += 1
nowlen = end - start
if(nowlen > maxlen):maxlen = nowlen
start = end
end += 1
return maxlen
Runtime: 68 ms, faster than 17.88% of Python3