594. 最长和谐子序列(简单)

和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。

现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。

#超出时间了
class Solution(object):
    def findLHS(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        result=0
        d={}
        for i in set(nums):
            d[i]=nums.count(i)
        for i in set(nums):
            if i+1 in nums:
                if d[i]+d[i+1]>result:
                    result=d[i]+d[i+1]
        return result
class Solution(object):
    def findLHS(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        result=0
        d=collections.Counter(nums)
        for i in nums:
            if i+1 in d:
                result=max(result,d[i]+d[i+1])
        return result

执行用时: 180 ms, 在Longest Harmonious Subsequence的Python提交中击败了26.17% 的用户

class Solution(object):
    def findLHS(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        d={}
        for i in nums:
            if i not in d:
                d[i]=1
            else:
                d[i]+=1
        s=d.keys()
        s.sort()
        result=0
        for i in range(len(s)-1):
            if s[i+1]==s[i]+1:
                result=max(result,d[s[i+1]]+d[s[i]])
        return result

执行用时: 96 ms, 在Longest Harmonious Subsequence的Python提交中击败了89.26% 的用户

 

第一次超时间是做字典的方法耗时间了,需要N*2的时间,现在只需要N的时间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值