题目描述

为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。

输入描述

每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。
接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。
接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。
保证不存在两项工作的报酬相同。

输出描述

对于每个小伙伴,在单独的一行输出一个正整数表示他能得到的最高报酬。一个工作可以被多个人选择。

输入示例

3 3
1 100
10 1000
1000000000 1001
9 10 1000000000

输出示例

100
1000
1001

分析

这道题看似像动态规划中的01背包问题,但是不是,一开始我以为是动态规划问题,直接就写了个01背包,发现java内存溢出了,其实这道题的精髓在于第一句话:牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。就是说在工作难度小于等于自身能力的工作中,选择其中最高的报酬,所以说这道题考的就不是动规,而是排序和查找

解法:代码中做了详细的注释,一看便知,我已经在牛客网上运行通过了,可以直接复制

import java.util.Arrays;
import java.util.Scanner;
import java.util.TreeMap;public class 牛牛找工作 {public static void main(String[] args) {//输入流Scanner sc = new Scanner(System.in);int n = sc.nextInt();//n表示工作的数量int m = sc.nextInt();//m表示同学的数量// jobs数组 n行2列 n行表示n个工作,第一列表示工作的难度, 第二列表示工作的报酬int[][] jobs = new int[n][2];for (int i=0;i<n;i++){jobs[i][0] = sc.nextInt();//表示工作的难度jobs[i][1] = sc.nextInt();//表示工作的报酬}//jobs数组排序Arrays.sort(jobs, ((o1, o2) -> o1[0]-o2[0]));//按照工作难度从小到大排序//很重要 我们把每个工作的报酬设置为 难度比他小的这些工作中的最大报酬for (int i=1;i<jobs.length; i++){jobs[i][1] = Math.max(jobs[i - 1][1], jobs[i][1]);}//将job数组存储到TreeMap中,其中,key=难度,value=最大报酬TreeMap<Integer, Integer> map = new TreeMap<>();for (int i=0; i<jobs.length; i++){map.put(jobs[i][0], jobs[i][1]);}//输入每个同学的能力abilityfor (int i=0;i<m;i++){int ability = sc.nextInt();//返回的是小于等于ability的最大key,其实这里就是在找这个能力下的最大工作难度Integer key = map.floorKey(ability);if (key != null)//找到这个难度对应的最大报酬就是我们想得到的最大报酬System.out.println(map.get(key));elseSystem.out.println(0);}}
}

网易2019笔试牛牛找工作Java解法相关推荐

  1. 校招真题练习001 牛牛找工作(网易)

    牛牛找工作 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬.牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作.在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作 ...

  2. 牛牛找工作--网易2019实习生招聘编程题

    时间限制:2秒 空间限制:65536K 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬.牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作.在牛牛选定了自己的工作后,牛牛 ...

  3. 牛客网--牛牛找工作

    题目描述 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬.牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作.在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作, ...

  4. BZOJ 2019 [Usaco2009 Nov]找工作:spfa【最长路】【判正环】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2019 题意: 奶牛们没钱了,正在找工作.农夫约翰知道后,希望奶牛们四处转转,碰碰运气. 而 ...

  5. 【BZOJ】2019: [Usaco2009 Nov]找工作(spfa)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2019 spfa裸题.....将飞机场的费用变成负,然后spfa找正环就行了 #include < ...

  6. 北京-找工作-java程序员-难

      终于来到北京了.可是来到北京工作好迷茫.原本以为哥哥的朋友可以介绍份好工作.没想到哥哥的朋友也是让我自己找工作.这两天几乎每天早上起来都必须在网上投简历.从java软件工程师方向扩展到java项目 ...

  7. 找工作java还是python有用_你觉得学 Python 还是 Java 更好找工作?

    不管现在大家如何追捧和吹嘘Python,培训机构怎么勾搭,广告怎么打,你打开招聘网站,在相同的搜索条件下搜下"Python"和"Java"两个关键词,认真的查看 ...

  8. 笔试面试找工作个人总结(持续更新)

    为什么80%的码农都做不了架构师?>>>    注:本文主要是自己的查漏补缺,为了以后复习能够更快回顾,如果能和大家交流,那就更好啦. 字体颜色:红色(题目) 绿色(解析) 黑色(题 ...

  9. 网易2019实习生招聘编程题

    **原题链接:**点这儿 网易的题还是有技术含量的,二分和数学和优美暴力考察得较多,这些东西在工作中确实很重要,都是优化程序的方法. # 第一题:牛牛找工作 ## 题目: > 为了找到自己满意的 ...

最新文章

  1. 安徽省计算机一级文化基础,计算机一级文化基础选择题
  2. 边沿检测与信号同步?
  3. 【数据挖掘知识点六】假设检验
  4. Python操作Excel表格
  5. JSF Struts Spring Hibernate 整合
  6. ReportLab for PDF
  7. c++猜数字_用Excel玩数字炸弹,猜0-100你需要几次?
  8. linux 下root 口令破解(二) ——说一下grub的密码和安全模式
  9. 【白皮书分享】2020年短视频全链路营销白皮书.pdf(附下载链接)
  10. 2017年西安邮电大学第十二届数学建模竞赛B题论文
  11. 【Git】git add
  12. 学习笔记 time模块练习 纪念日计算
  13. HarmonyOS的万里长征和万里长城
  14. 春考天津计算机知识点资料,2016年天津春季高考计算机基础考试大纲
  15. [kernel 启动流程] 前篇——vmlinux.lds分析
  16. c语言中n的阶乘的流程图,n的阶乘流程图(计算机n的阶乘流程图)
  17. 国讯通用OA协同办公系统源码
  18. 原型系统研究报告撰写_阅书斋 | 王蔷英语教师行动研究:如何撰写行动研究报告...
  19. 十分钟让你看懂当前中国经济形势(转载)严重推荐!
  20. 微信小程序学习5:小程序语法-事件绑定之给事件传递参数

热门文章

  1. Python 获取当前文件 当前目录 上级目录 上上级目录
  2. TensorFlowLite量化-网上资料摘抄
  3. python-opencv实战:车牌识别(二):字符分割与保存
  4. windows 强力 删除
  5. php 分布存储,分布式存储原理是什么?
  6. (1)eop烧写和uboot烧写
  7. 面进百度,被这份阿里大能开源的“全彩版图解 HTTP 手册”折服了,要不怎么说还得是权威啊
  8. android hal 音频分析,实现车载音频 HAL  |  Android 开源项目  |  Android Open Source Project...
  9. mysql初始化root密码_MySQL初始化root密码的正确操作流程
  10. Scala偏函数与部分函数