快手-180910-算法A卷题解

前两题“字符串归一化”和“魔法深渊”的 Python 代码

第三题按照一楼的思路写的 Python 代码,请大家检验一下有没有问题,能过样例

N, M = 7, 3
ns = [1, 2, 3, -2, 3, -10, 3]
new_ns = []
tmp = ns[0]
cnt_pos = 0  # 正数块的数量
for i in ns[1:] + [0]:  # trick
    if i != 0 and (tmp > 0) == (i > 0):  # 跳过 0
        tmp += i
    else:
        if tmp > 0:
            cnt_pos += 1
        new_ns.append(tmp)
        tmp = i
# new_ns.append(tmp)
print(new_ns)  # [6, -2, 3, -10, 3]
print(cnt_pos)  # 3
# 去掉首尾的负数块
if len(new_ns) >= 1 and new_ns[0] < 0:
    new_ns.pop(0)
if len(new_ns) >= 1 and new_ns[-1] < 0:
    new_ns.pop(-1)
print(new_ns)  # [6, -2, 3, -10, 3]
# 按奇偶划分奇数和偶数块
ns_pos = new_ns[0::2]
ns_neg = new_ns[1::2]
print(ns_pos)  # [6, 3, 3]
print(ns_neg)  # [-2, -10]
# 如果 M 的值小于正数块的数量则进行合并
updated = True
while updated and M < cnt_pos:
    """"""
    updated = False
    mx_i = 0
    # mx = max(ns_pos[mx_i] + ns_pos[mx_i+1] + ns_neg[mx_i], ns_pos[mx_i], ns_pos[mx_i])
    mx = float("-inf")
    for i in range(len(ns_neg)):
        tmp = ns_pos[i] + ns_pos[i+1] + ns_neg[i]
        if tmp < max(ns_pos[i], ns_pos[i+1]):
            continue
        if tmp > mx:
            updated = True
            mx = tmp
            mx_i = i
    if updated:
        # 更新合并后的数组
        ns_neg.pop(mx_i)
        ns_pos[mx_i] = mx
        ns_pos.pop(mx_i+1)
        cnt_pos -= 1
ns_pos.sort(reverse=True)
print(sum(ns_pos[:M]))
#快手##题解#
全部评论
同求
点赞 回复 分享
发布于 2018-09-10 22:38
我的思路是这样的,不过写着写着没时间了,还是自己太菜了啊! /* 1、先把整个数组改成正负交错的数组,去掉首尾的负数(相邻的正数合并成一个正数,负数合并成一个负数)  2、如果正数个数<=M,输出所有的正数之和 3、如果正数个数>M,将数组中[正负正]合并,该负数为数组中负数的最大值并且三者之和>三者最大值 4、直到3不满足或者正数个数<=M,输出最大的M个正数之和  */ 
点赞 回复 分享
发布于 2018-09-10 21:38

相关推荐

刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结:&nbsp;27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
字节7000实习来了,你...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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