1. 程式人生 > >【python3】leetcode 674. Longest Continuous Increasing Subsequence(easy)

【python3】leetcode 674. Longest Continuous Increasing Subsequence(easy)

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