美文网首页我爱编程
网易-牛牛找工作(Python)

网易-牛牛找工作(Python)

作者: AliceWhale | 来源:发表于2018-04-16 12:59 被阅读0次

完整的题目说明在下面链接:2018网易-牛牛找工作

一、思路

一个很简单的想法是根据每个人的能力值与所有工作的难度进行比较,但时间复杂度为N * N,不能通过全部用例。
另一个想法是先将工作按照工作的难度进行排序,在将小伙伴按照能力的从小到大排序,依次获取难度满足小伙伴要求的工作的最大报酬。主要的进行的操作是排序,时间复杂度为N*log(N)。

二、相关操作

  1. 读取输入
    之前我通常使用input()函数作为数据的读入,input()读入是以换行为结束标志,获得的字符串不会包括换行符,有多少行就需要进行多少次input()操作。发现有人用sys库的 sys.stdin.readlines()进行读入,如下
lines = sys.stdin.readlines()
for line in lines:
  #do some things#
  pass

该函数会把标准输入的全部获取,包括换行符,需要ctrl+d来结束输入,该函数需要注意一下几点
* 输入的最后必须是一个换行,否则不能停止输入
* 返回的是一个list,包含每行的输入字符串,每个字符串都以空格结尾

  1. 去除字符串首尾的指定字符
    字符串的strip()方法可以实现这个功能,默认是去除首尾的换行符。
  2. 字符串到整形的转换
    一个很直接的方法是用for循环来对分割后的每个字符进行int()转换,但一个更加简洁高效的方法是用map函数来实现,这个函数需要两个参数,第一个参数是比变换的函数,第二个参数是可以迭代的对象。
[a,b] = map(int,line.strip().split())
  1. 字典的排序
    字典具有去重的功能,去重后排序主要是利用sorted函数,具体操作如下
cop=sorted(DP.items(),key=lambda x=x[0])

第一个参数是一个可迭代对象,第二个参数是一个函数,每个可迭代对象会结果函数处理后再进行比较

  1. 带索引的list排序
    由于输出的结果通常有顺序的要求,对list的排序希望能够保留相应的索引号。这里用到了enumerate函数,该函数主要是将可迭代对象组合成一个索引序列,返回的是一个枚举对象。在利用sorted函数对返回的对象进行排序。
A = enumerate(map(int,lines[-1].strip().split()))
cop = sorted(DP.items(),key = lambda x:x[0])

三、代码

通过全部用例的Python代码如下,需要注意的是输入用例包括无意义的空行,需要去除。

import sys
lines = sys.stdin.readlines()
DP = {}
for line in lines[1:-1]:
   if not line.strip().split():
       continue
   [a,b] = map(int, line.strip().split())
   DP[a] = max(DP.get(a,0),b)
cop = sorted(DP.items(),key = lambda x:x[0])
#读取每个人的能力值
A = enumerate(map(int,lines[-1].strip().split()))
A = sorted(A,key = lambda x:x[1])
maxvalue = 0
cpind = 0
M = len(A)
N = len(DP)
res = [0]*M
for i in range(N):
   while cop[i][0]>A[cpind][1]:
       res[A[cpind][0]] = maxvalue
       cpind += 1
       if cpind >= M:
           break
   if cpind >= M:
           break
   if maxvalue<cop[i][1]:
       maxvalue = cop[i][1]
for i in range(cpind,M):
   res[A[i][0]] = maxvalue
for i in res:
   print(i)

相关文章

  • 网易-牛牛找工作(Python)

    完整的题目说明在下面链接:2018网易-牛牛找工作 一、思路 一个很简单的想法是根据每个人的能力值与所有工作的难度...

  • 网易校招真题一

    网易 牛牛找工作 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值...

  • 牛牛找工作

    题目描述: 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况...

  • 网易 2019 实习生编程题

    网易 2019 实习生的编程题 牛牛找工作 每个输入包含一个测试用例。每个测试用例的第一行包含两个正整数,分别表示...

  • python 三方库

    ncmbot 网易云音乐 Python 组件库,用 Python 玩转网易云音乐 Pillow Python平台的...

  • 2018 网易 iOS [编程题] 迷路的牛牛

    2018 网易 iOS [编程题] 迷路的牛牛 [TOC] 牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷...

  • 网易2019实习生招聘编程题集合

    1.牛牛找工作 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的...

  • 初来乍到

    我是从网易过来的牛牛书香。有缘与网易好友再见面是件开心的事。亦可结识新朋友,甚喜。先留个印记。

  • 网易笔试2018编程题

    第一题 [编程题] 牛牛找工作时间限制:2秒 空间限制:65536K 为了找到自己满意的工作,牛牛收集了每种工作的...

  • 算法题目集

    1、来自网易:为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情...

网友评论

    本文标题:网易-牛牛找工作(Python)

    本文链接:https://www.haomeiwen.com/subject/ukmskftx.html