字节跳动 Magic

【题目描述】 给一个包含 n个整数元素的集合 个整数元素的集合 a,一个包含 m个整数元素的集合 b。
定义 magic操作为,从一个集合中取出元素放到另里且过后每的平均值都大于操作前。
注意以下两点:
①不可以把一个集合的元素取空,这样就没有平均值了
②值为 x的元素从集合 b取出放入集合a,但集合 a中已经有值为 x的元素,则 a的平均值不变(因为集 合元素不会重复), b的平均值可能会改变(因为 x被取出了)
问最多可以进行少次 magic操作
输入:
3 5
1 2 5
2 3 4 5 6
输出:
2

 

题目整体不难,记录一下几个细节点:

1.题目涉及转移元素,因为转移后被转的平均数要变大,而转入相同的数不会替换原来的元素,也不会改变原本的平均值,所以这里存放数据的时候都用的是集合,即set. set里的元素就像字典的key值,不存在重复。集合用set()构建。因为涉及后续比较,格式要转为float。

2.用到了一个python中的无穷大作为比较。写法:float('inf')。

自己的代码如下:

class Magic:
    def findMin(self, biggerset, smallerset, meana, meanb):
        min_val = float('inf')
        if not biggerset:
            return -1

        for element in biggerset:
            if min_val > element and element < meana and element > meanb and element not in smallerset:
                min_val = element

        if min_val == float('inf'):
            return -1
        return min_val

    def swap(self, a, b):
        return [b, a]

    def mean(self, seta):
        return sum(seta)/len(seta)

if __name__ == '__main__':
    [n, m] = list(map(int, input().split(' ')))
    seta = set(map(float, input().split(' ')))  # 用set确定其不能重复
    setb = set(map(float, input().split(' ')))

    m = Magic()
    meana = m.mean(seta)
    meanb = m.mean(setb)
    if meana < meanb:  # 确保是seta的平均比setb大
        temp = set()
        temp = seta
        seta = setb
        setb = temp
        [meana, meanb] = m.swap(meana, meanb)

    step = 0
    min_val = m.findMin(seta, setb, meana, meanb)
    while(min_val != -1):
        seta.remove(min_val)
        meana = m.mean(seta)
        setb.add(min_val)
        meanb = m.mean(setb)
        step += 1
        min_val = m.findMin(seta, setb, meana, meanb)

    print(step)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简介之前罗嗦一句:以下内容版本归原作者,本来本着分享精神我不应该要这一分 的,但是我发现整理这些资源竟然整整花了我超过一个小时,而且原先地址的资源有 些不能下载,我是千方百计找到所有的ppt,做个合集方便大家,节约大家的时间吧, 以下正题! 2015 国大数据技术大会已经圆满落幕,本届大会,以更加国际化的视野,从政 策法规、技术实践和产业应用等角度深入探讨大数据落地后的挑战,作为大数据产业 界、科技界与政府部门密切合作的重要平台,吸引了数千名大数据技术爱好者到场参 会。 以下为合集列表: 1. 启明星辰公司副总裁潘柱廷:2016 年大数据技术发展趋势解读 2. Databricks公司联合创始人、Spark首席架构师辛湜:Spark发展:回顾2015,展望 2016 3. 京东云平台总架构师、系统技术部负责人刘海锋 :从2014 到2016,大规模内存数 据库演进之路 4. Hulu 资深研发主管梁宇明 :Voidbox - Docker On YARN在Hulu的实践 5. Pivotal 研发总监姚延栋:开源大数据引擎:分布式Greenplum数据库内核分析 6. 阿里巴巴iDST语音组高级专家鄢志杰 :Deep Learning助力客服小二:数据技术及 机器学习在客服心的应用 7. 小米金融技术主管方流: 大数据在互联网金融的应用 8. 新加坡管理大学信息系统学院教授朱飞达 :大数据与金融创新:从研究到实战 9. 宜信大数据创新心首席数据科学家项亮: 大数据在信用风险管理的应用 10. 南京大学计算机系PASA大数据实验室教授黄宜华 :Octopus(大章鱼):基于R语 言的跨平台大数据机器学习与数据分析系统 11. 百度基础架构部高级架构师沈国龙 :BML百度大规模机器学习云平台实践 12. 新浪微博算法技术总监姜贵彬:大数据驱动下的微博社会化推荐 13. FreeWheel技术副总裁李旸:FreeWheel基于大数据的新兴视频广告测量实践 14. 阿里巴巴数据安全部阿里数据安全小组总监郑斌:大数据下的数据安全 15. 数美公司联合创始人兼CTO梁堃:Sentry金融实时风控系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值