题目描述:
题解一:
本来打算用滑动窗口,但题目要求的子序列也不是连续的。
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