Python:每日一题 378
本帖最后由 zltzlt 于 2020-4-17 18:47 编辑今天的题目:
和谐数组是指一个数组里元素的最大值和最小值之间的差距正好是 1 的数组。
给定一个整数数组,在这个数组所有为和谐数组的子序列中找到最长的和谐子序列的长度。
示例:
输入:
输出:5
解释:最长的和谐数组是: 。
{:10_298:}欢迎大家一起答题!{:10_298:} 本帖最后由 kinkon 于 2020-4-17 20:00 编辑
试试看能不能通过,速度应该是很慢的
from collections import Counter
def f378(nums):
res = Counter(nums)
res = sorted(res.items())
out,stack = 0, []
for val, c in res:
#print(stack)
if len(stack) == 1:
if val - 1 == stack[-1]:
out = max(out, c + stack[-1])
stack.pop()
stack.append()
return out 本帖最后由 永恒的蓝色梦想 于 2020-4-17 21:35 编辑
方法超级捞{:10_306:}class Solution:
def findLHS(self, nums: List) -> int:
map=collections.Counter(nums)
max=0
for i,j in map.items():
i=map
if i:
j+=i
if j>max:
max=j
return max 本帖最后由 March2615 于 2020-4-17 20:09 编辑
from collections import Counter
def daily378(nums: list) -> int:
# 解题思路:
# 首先对nums元素进行计数
# 如果两元素差1,则返回两者个数之和
count_nums = Counter(nums)
result = 0
set_nums = set(nums)
for num in set_nums:
if num + 1 in set_nums:
result = max(result, count_nums + count_nums)
return result 占楼
偷偷的想到双指针 ……我觉得你可以自己出题,不用在力扣上找…… _2_ 发表于 2020-4-17 19:28
占楼
偷偷的想到双指针
子序列,和双指针没半毛钱关系 一定要连续的吗 本帖最后由 kinkon 于 2020-4-17 20:21 编辑
优化一下
def f378(nums):
res = Counter(nums)
out = 0
for val, c in res.items():
if val - 1 in res:
out = max(out, c + res)
return out 我可能要30分钟 kinkon 发表于 2020-4-17 18:47
试试看能不能通过
我觉得最好用内置函数 小甲鱼de粉丝 发表于 2020-4-17 19:57
我觉得最好用内置函数
多谢提醒,Counter原来也是内置函数,用字典也可以实现这个功能,代码比较多,当练习了 kinkon 发表于 2020-4-17 20:03
多谢提醒,Counter原来也是内置函数,用字典也可以实现这个功能,代码比较多,当练习了
嗯,一起学习吧 本帖最后由 TJBEST 于 2020-4-18 18:20 编辑
这个可能超时
def fun378(arr):
dictionary = dict()
for each in arr:
try:
dictionary += 1
except:
dictionary = 1
method = list(dictionary.items())
method.sort()
previous = method
Num = previous
for temp in method:
if temp - previous == 1:
if temp + previous > Num:
Num = temp + previous
else:
pass
else:
if temp> Num:
Num = temp
else:
pass
previous = temp
return Num 我就纳闷了,为什么速度会差这么多,明明都是差不都的方法,
是从不同地方读取的速度不一样吗? March2615 发表于 2020-4-17 20:13
我就纳闷了,为什么速度会差这么多,明明都是差不都的方法,
是从不同地方读取的速度不一样吗?
力扣的测速都不太准确,所以我有时用 unittest 测 zltzlt 发表于 2020-4-17 20:17
力扣的测速都不太准确,所以我有时用 unittest 测
我想着这么简单就去力扣通过了再来
结果老是给我说超时
看完答案后发现就是for _ in _ 的不同 本帖最后由 fan1993423 于 2020-4-17 22:20 编辑
from collections import Counter
def fun378(lst):
result=0
c=sorted(Counter(lst).items(),reverse=True)
for i in range(len(c)-1):
if c-c==1:
result=max(result,c+c)
return result 我这个如果运气好,也许第一个i就能出答案哦{:5_109:},另外版主能不能314,349测一下,我最近想出来的 本帖最后由 kinkon 于 2020-4-17 21:45 编辑
fan1993423 发表于 2020-4-17 21:10
按数量排序有可能会出错,例如,