leetcode 594. 最长和谐子序列python

题目描述:

 题解一:

本来打算用滑动窗口,但题目要求的子序列也不是连续的。

1.先将输入nums按照从小到大排序。

2.用一个dict记录nums中每个数字出现的次数,key为数字,value为出现的次数。因为nums已经按照从小到大排序,因此此时dict中的key也是按顺序排列。

3.在dict中寻找两个相邻的key差值为1,value之和最大即为最长的和谐子串。

class Solution:
    def findLHS(self, nums: List[int]) -> int:
        nums = sorted(nums)
        mydict = {}
        for i in nums:
            if i not in mydict.keys():
                mydict[i] = 1
            else:
                mydict[i] = mydict[i]+1
        maxlen = 0
        dictnums = list(mydict.keys())
        for i in range(len(dictnums)-1):
            if abs(dictnums[i+1]-dictnums[i])==1:
                maxlen = max(maxlen,mydict[dictnums[i]]+mydict[dictnums[i+1]])
        return maxlen

 python提交总是出错,python3提交通过。

题解二:

class Solution:
    def findLHS(self, nums):
        ans = 0
        mycount = Counter(nums)
        for num in nums:
            if num+1 in mycount:
                ans = max(ans,mycount[num]+mycount[num+1])
        return ans

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值