Leetcode_Array -- 674. Longest Continuous Increasing Subsequence [easy]

本文介绍了一种高效算法,用于找出给定未排序整数数组中的最长连续递增子序列,并返回其长度。通过实例解析算法实现,包括Python和C++代码示例。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值