python - 查找列表中至少共享一个相同数字的元素的最大可能数量
问题描述
给定包含数字的数组存在一个问题,该语句是找到从给定数组形成的子序列的最大长度,使得该子序列中的所有元素共享至少一个公共数字。
现在有什么问题?好吧,我打算使用字典b
将键存储为每个数字,并将值存储为计数,同时逐位遍历给定数组。我认为字典值的最大数量,即更大的数字计数将是问题的答案,因为我们仍然有一个小故障,我们不应该多次计算出现在数组的一个元素中的相同数字。为了克服这个故障,我使用了 set c
。
为方便起见,此代码功能以及下面编写的驱动程序功能。
def solve (a):
b={}
answer=1
for i in a:
j=i
c=set()
c.clear()
while(j):
last_digit=i%10
if(last_digit not in b and last_digit not in c):
b[last_digit]=1
c.add(last_digit)
elif(last_digit in b and last_digit not in c):
b[last_digit]+=1
c.add(last_digit)
answer=max(answer,b[last_digit])
j//=10
return answer
a=list(map(int,input().strip().split()))
print(solve(a))
有很多测试用例关注此代码是否正确。其中一个是输入12 11 3 4 5
,代码给出的输出是1
,预期输出是2
。是什么赋予了?
解决方案
你有好主意。但是,如果您使用模块中的Counter
对象,您的代码会更容易collections
。它旨在做你想做的事情:计算一个项目在一个迭代中的出现次数。
此代码使用生成器表达式查看 list 中的每个值alist
,使用内置str()
函数将该整数转换为数字字符串,然后使用set()
内置函数将其转换为集合。正如您所说,这会删除重复的数字,因为您只想对每个项目计算每个数字一次。然后该Counter
对象查看这些数字并计算它们的出现次数。然后代码使用Counter
'smost_common
方法选择出现次数最多的数字(该(1)
参数仅返回列表中最流行的单个数字,并且0
索引将该数字及其计数从列表中取出)然后获取该数字的计数(那是1
索引)。然后将该计数返回给调用者。
如果您不熟悉Counter
或不熟悉生成器表达式,您可以自己计算并使用常规for
循环。但是对于任何知道该Counter
对象的人来说,这段代码都很简短而且相当清楚。如果您想要简短的代码,您可以使用注释中的行替换以下四行,但我扩展了代码以使其更清晰。
from collections import Counter
def solve(alist):
digitscount = Counter(digit for val in alist for digit in set(str(abs(val))))
# return digitscount.most_common(1)[0][1]
most_common_list = digitscount.most_common(1)
most_common_item = most_common_list[0]
most_common_count = most_common_item[1]
return most_common_count
alist = list(map(int, input().strip().split()))
print(solve(alist))
对于您的示例输入12 11 3 4 5
,这将打印正确的答案2
。请注意,如果输入为空或包含非整数,我的代码将出错。我的代码的这个版本采用列表值的绝对值,这可以防止减号(或负号)被计为数字。
推荐阅读
- android - 应用程序启动时前台服务出错
- django - 不能有一个带有“媒体”这个词的蛞蝓。姜戈
- javascript - 如何仅使用 Javascript 从“A”获取 UTF 代码值“0041”?
- angular - 导航栏产品角度计数器
- reactjs - 在 Pattern 中定义的 react-native-svg 图像位于错误的坐标上
- c++ - 即使地址相同,为什么结果却不同?
- javascript - 忽略缓存导入模块 es6
- python - Ubuntu 18.04.05 LTS 上的 YOLO V3 Python [Errno 2] 没有这样的文件或目录:'/dev/ttyUSB0'
- java - 位置 getLastKnownLocation 返回 null
- angular - 如果从本地存储 ionic 读取令牌授权错误