题解 | #数组分组#

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

from math import nan
#获取数据并整理成列表
cnt_input = input()
list_in = input().split(' ')
list_input = []
for i in list_in:
    if i != '':
        list_input.append(int(i))
    else:
        continue
####数据初始化,获取到数组后,整理数组
#初始化数组
list_3 = []#3倍组
list_5 = []#5倍组
list_o = []#公共组

#分为3倍组,5数组以及公共组
for v in list_input:
    if v%15 == 0:#因为同时为3和5的公倍数的话两组都可以放进去,所以也算公共组
        list_o.append(v)
    elif v%3 == 0:
        list_3.append(v)
    elif v%5 == 0:
        list_5.append(v)
    else:
        list_o.append(v)
#计算3倍组与5倍组的差
tar_num = abs(sum(list_3)-sum(list_5))
#此时我们获得两个关键信息,3倍组与5倍组的差值(后面简称差值),还有一组公共数组
#注意此处不要被数字的符号干扰,只要你能找到一组数的绝对值等于差值的绝对值就说明这个公共组有解
#思路:1.把公共组所有数字取绝对值并倒序排序
#2.按照多扣少补的思路,让公共组的计算值与差值做比较,计算值比差值大则把下一个数字减去上一个计算值,少则加
#3.把公共组的所有数遍历完成后得到最终的计算值,只要最终的计算值的绝对值与差值的绝对值相等,那结果就是有解
standard_o = list(map(lambda x:abs(x),list_o))
standard_o.sort(reverse=True)
v_res = None
if len(standard_o) > 2:
    v_res = standard_o[0]
    for vi in range(1, len(standard_o)):
        if v_res >= tar_num:
            v_res -= standard_o[vi]
        elif v_res < tar_num:
            v_res += standard_o[vi]
elif len(standard_o) == 2:
    v_res = standard_o[0]
    if v_res >= tar_num:
        v_res -= standard_o[1]
    elif v_res < tar_num:
        v_res += standard_o[1]
elif len(standard_o) == 1:
    v_res = standard_o[0]
else:
    v_res = 0

if abs(v_res) == tar_num:
    print('true')
else:
    print('false')

全部评论

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
自学java狠狠赚一...:骗你点star的,港卵公司,记得把star收回去
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务