【python3】leetcode 674. Longest Continuous Increasing Subsequence(easy)
阿新 • • 發佈:2018-12-14
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