算法98---瞌睡(网易笔试)

Posted lee-yl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法98---瞌睡(网易笔试)相关的知识,希望对你有一定的参考价值。

技术图片

技术图片

 

思路:

"""
思路:从左到右遍历,比较k长度内睡着0状态对应兴趣值的和,即叫醒一下提升的兴趣值。
    总值分为两部分:醒着的固定值 + 睡着的提升值的最大值
"""

代码:

n,k =list(map(int, input().split()))
values =list(map(int, input().split()))
awakes =list(map(int, input().split()))
#n,k = [6,3]
#values = [1, 3, 5, 2, 5, 4]
#awakes = [1, 1, 0, 1, 0, 0]

base_value = 0
for i in range(n):
    if awakes[i] == 1:
        base_value += values[i]
        values[i] = 0
max_value = 0
for i in range(n):
    if awakes[i] == 0:
        max_value = max(sum(values[i:min(k+i,n)]) , max_value)
        # 加了下面的break语句,才使这个代码时间上终于达标
      # 扫描到距结尾不足k距离范围内的第一个睡着状态即可,后面的肯定不如这个的提升值大,没必要再跑,可提前结束
if i > n - k + 1:
            break
print(base_value + max_value)

 

以上是关于算法98---瞌睡(网易笔试)的主要内容,如果未能解决你的问题,请参考以下文章

算法99---丰收(网易笔试)--二分查找

网易机器学习算法工程师笔试编程题

每天一道算法编程题——网易笔试"工程师工作安排“问题

网易2019校招笔试题-瞌睡

网易2019校招笔试题-瞌睡

拓扑排序 POJ 2367