• 校招真题练习025 瞌睡(网易)


    瞌睡

    题目描述
    小易觉得高数课太无聊了,决定睡觉。不过他对课上的一些内容挺感兴趣,所以希望你在老师讲到有趣的部分的时候叫醒他一下。你知道了小易对一堂课每分钟知识点的感兴趣程度,并以分数量化,以及他在这堂课上每分钟是否会睡着,你可以叫醒他一次,这会使得他在接下来的k分钟内保持清醒。你需要选择一种方案最大化小易这堂课听到的知识点分值。

    输入描述:
    第一行 n, k (1 <= n, k <= 105) ,表示这堂课持续多少分钟,以及叫醒小易一次使他能够保持清醒的时间。
    第二行 n 个数,a1, a2, ... , an(1 <= ai <= 104) 表示小易对每分钟知识点的感兴趣评分。
    第三行 n 个数,t1, t2, ... , tn 表示每分钟小易是否清醒, 1表示清醒。

    输出描述:
    小易这堂课听到的知识点的最大兴趣值。

     1 n,k = [int(x) for x in input().strip().split()]
     2 scores = [int(x) for x in input().strip().split()]
     3 wakes = [int(x) for x in input().strip().split()]
     4 
     5 if n <= k:
     6     print(sum(scores))
     7 else:
     8     maxscore = 0
     9     sums = 0
    10     for i in range(n):
    11         if wakes[i] == 1:
    12             sums += scores[i]
    13             scores[i] = 0
    14     i = 0
    15     j = 0
    16     while j < k:
    17         if wakes[j] == 0:
    18             sums += scores[j]
    19         j += 1
    20     maxscore = max(maxscore,sums)
    21     for i in range(n-k):
    22         sums -= scores[i]
    23         sums += scores[j]
    24         j += 1
    25         maxscore = max(maxscore,sums)
    26     print(maxscore)

    算法思路:滑动窗口。

    在滑动窗口内计算全部值的和。窗口滑动时,将左侧的值减去,将右侧的值加上。每次移动窗口计算当前窗口内的得分,保留最大值。

  • 相关阅读:
    spring cloud-zuul的Filter详解
    Hibernate day01
    JAVA中几种常用的RPC框架介绍
    乐观锁和悲观锁的区别(最全面的分析)
    Redis、Memcache和MongoDB的区别
    Hessian整合Spring
    Hessian的使用以及理解
    sso单点登录系统原理与实现
    zookeeper原理(转)
    Nginx的负载均衡的几种方式
  • 原文地址:https://www.cnblogs.com/asenyang/p/11229738.html
Copyright © 2020-2023  润新知