网易2019实习生招聘算法题(一)


题目

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


输入描述:

每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,分别表示工作的数量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


解题思路:

方案一:

Step1: 工作难度跟报酬存储在哈希表中,另存工作难度在数组a[0~n]中
Step2 : 把小伙伴初始报酬记为0,与工作能力值一起存在上一个哈希表中;同时a[n~n+m]存小伙伴的能力值.
Step3 : 排序数组a(从小到大)(数组大小为n+m)
Step4(关键) : 循环比较,得到每个当前能力值以下最大的报酬max,同时替换哈希表中的键值对
Step5: 输出.
复杂度分析 :
空间复杂度 : O(n);
时间复杂度 O(n*log n);


code :

import java.util.*;
public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int t1=0, t2=0;HashMap<Integer, Integer> hs = new HashMap<>();int[] a = new int[n+m];int[] b = new int[m];for (int i=0; i<n; i++) {t1 = sc.nextInt();t2 = sc.nextInt();a[i] = t1;hs.put(t1, t2);}for (int i = 0; i < m; i++) {t1 = sc.nextInt();a[n+i] = t1;b[i] = t1;if( !hs.containsKey(t1) )hs.put(t1, 0);}Arrays.sort(a);int max = 0;for (int i = 0; i < m + n; i++) {max = Math.max(max, hs.get(a[i]));hs.put(a[i], max);}for (int i = 0; i < m; i++) {System.out.println(hs.get(b[i]));}}
} 

方案二


Step1 : 二维数组arr存储工作难度与报酬;
Step2 : arr从小到大按 报酬 排序;
Step3 : 利用TreeMap的floorKey函数获取map中小于等于能力值的Key,输出;
复杂度分析 :
空间复杂度 : O(n);
时间复杂度 O(n*log n);


code :

import java.util.*;
public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int M = sc.nextInt();int[][] arr = new int[N][2];TreeMap map = new TreeMap();for (int i = 0; i < N; i++) {arr[i][0] = sc.nextInt();arr[i][1] = sc.nextInt();}Arrays.sort(arr, (e1, e2) -> (int)(e1[0] - e2[0]));for (int i = 1; i < arr.length; i++) {arr[i][1] = Math.max(arr[i-1][1], arr[i][1]);}for (int i = 0; i < arr.length; i++) {map.put(arr[i][0], arr[i][1]);}for (int i = 0; i < M; i++) {int ability = sc.nextInt();Integer index = map.floorKey(ability);if (index != null) {System.out.println(map.get(index));} else {System.out.println(0);}}}
}   

结语

  • 如觉不妥,欢迎交流谈论~
  • @MingLachsis

网易2019实习生招聘算法题(一)相关推荐

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

    前言 利用周末时间做了这套网易2019实习生招聘编程题,链接如下: 题目链接 成绩 先来看一下博主的成绩,打了67分,完全做对了4道题,另外的4道题中1道题完成了80%,1道题完成了30%.评价一下就 ...

  2. 网易2019实习生招聘编程题集合 矩形重叠

    网易2019实习生招聘编程题 矩形重叠 题目链接:https://www.nowcoder.com/test/9763997/summary [编程题] 矩形重叠 时间限制:1秒 空间限制:32768 ...

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

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

  4. 网易2019实习生招聘编程题集合 - 题解

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

  5. 网易2019实习生招聘编程题解答

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

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

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

  7. 牛牛的闹钟--网易2019实习生招聘编程题

    牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床.从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时间起床 输入描述: 每个输入包含一个 ...

  8. 网易2019实习生招聘编程题之数对

    文章目录 限制 时间限制:1秒 空间限制:32768K 题目描述 牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了. 但是牛牛记得老师告诉过他x和y均不大于n, 并且x除 ...

  9. 2017百度实习生招聘算法题

    题目一:[编程题] 单词接龙 拉姆刚开始学习英文单词,对单词排序很感兴趣. 如果给拉姆一组单词,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一单词的为字母相同. ...

最新文章

  1. iOS使用shell脚本批量修改属性
  2. 【Python学习系列十五】pandas库DataFrame行列操作使用方法
  3. 中考计算机考试作文,中考理化实验计算机考试作文
  4. java5的递归算法_java递归算法 java面试题(5)
  5. android contentprovider api,Content Provider Basics
  6. 分辨垃圾材质自动分类 支付宝升级垃圾分类AI回收箱
  7. 学而思“变身”乐读后宣布下架,已收家长费用“多退少不补”
  8. 卡尔曼滤波(Kalman filtering)算法学习小记
  9. android studio 通知栏广播,Android消息推送,通知栏的显示和点击
  10. MySQL数据库默认的端口号是_数据库的默认端口号
  11. 单片机破解方法(摘录)
  12. GAN网络的详细内容
  13. 【概率论基础01】:通俗解释,啥叫随机变量?
  14. 电子协会 C语言 1级 34 、分段函数
  15. 金蝶kis修改服务器,金蝶kis 修改服务器地址
  16. [硬核教程]如何解决电脑假死问题——适用于调用GPU有声音,无画面的情况。
  17. 正在获取服务器信息,正在获取远程列表服务器信息
  18. Python按照不同的后缀把文件存入不同的文件夹下面(后缀分类)
  19. 20210725个人周复盘
  20. 100个Myeclipse6.5免费注册码

热门文章

  1. H5音频播放功能的实现
  2. SolidWorks渲染图
  3. 文件批量改名-bat操作
  4. mysql笔记整理2(聚合函数).md
  5. 美国伊利诺伊州疫情数据分析
  6. cesium 设置时间_Cesium 车辆跟踪事件气泡弹窗一直开启
  7. Huge And Integer
  8. 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2
  9. 昨晚,散场后………他们流着泪唱着《笔记》……………
  10. c++中整形输入逗号_Excel 2013中单元格添加下拉列表的方法