网易2019实习生招聘算法题(一)
网易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实习生招聘算法题(一)相关推荐
- 网易2019实习生招聘编程题集合
前言 利用周末时间做了这套网易2019实习生招聘编程题,链接如下: 题目链接 成绩 先来看一下博主的成绩,打了67分,完全做对了4道题,另外的4道题中1道题完成了80%,1道题完成了30%.评价一下就 ...
- 网易2019实习生招聘编程题集合 矩形重叠
网易2019实习生招聘编程题 矩形重叠 题目链接:https://www.nowcoder.com/test/9763997/summary [编程题] 矩形重叠 时间限制:1秒 空间限制:32768 ...
- 网易2019实习生招聘编程题
**原题链接:**点这儿 网易的题还是有技术含量的,二分和数学和优美暴力考察得较多,这些东西在工作中确实很重要,都是优化程序的方法. # 第一题:牛牛找工作 ## 题目: > 为了找到自己满意的 ...
- 网易2019实习生招聘编程题集合 - 题解
原题链接:点这儿. 网易的题还是有技术含量的,二分和数学和优美暴力考察得较多,这些东西在工作中确实很重要,都是优化程序的方法. 第一题:牛牛找工作 题目: 为了找到自己满意的工作,牛牛收集了每种工作的 ...
- 网易2019实习生招聘编程题解答
问题一: 牛牛找工作 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬.牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作.在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛 ...
- 牛牛找工作--网易2019实习生招聘编程题
时间限制:2秒 空间限制:65536K 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬.牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作.在牛牛选定了自己的工作后,牛牛 ...
- 牛牛的闹钟--网易2019实习生招聘编程题
牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床.从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时间起床 输入描述: 每个输入包含一个 ...
- 网易2019实习生招聘编程题之数对
文章目录 限制 时间限制:1秒 空间限制:32768K 题目描述 牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了. 但是牛牛记得老师告诉过他x和y均不大于n, 并且x除 ...
- 2017百度实习生招聘算法题
题目一:[编程题] 单词接龙 拉姆刚开始学习英文单词,对单词排序很感兴趣. 如果给拉姆一组单词,他能够迅速确定是否可以将这些单词排列在一个列表中,使得该列表中任何单词的首字母与前一单词的为字母相同. ...
最新文章
- iOS使用shell脚本批量修改属性
- 【Python学习系列十五】pandas库DataFrame行列操作使用方法
- 中考计算机考试作文,中考理化实验计算机考试作文
- java5的递归算法_java递归算法 java面试题(5)
- android contentprovider api,Content Provider Basics
- 分辨垃圾材质自动分类 支付宝升级垃圾分类AI回收箱
- 学而思“变身”乐读后宣布下架,已收家长费用“多退少不补”
- 卡尔曼滤波(Kalman filtering)算法学习小记
- android studio 通知栏广播,Android消息推送,通知栏的显示和点击
- MySQL数据库默认的端口号是_数据库的默认端口号
- 单片机破解方法(摘录)
- GAN网络的详细内容
- 【概率论基础01】:通俗解释,啥叫随机变量?
- 电子协会 C语言 1级 34 、分段函数
- 金蝶kis修改服务器,金蝶kis 修改服务器地址
- [硬核教程]如何解决电脑假死问题——适用于调用GPU有声音,无画面的情况。
- 正在获取服务器信息,正在获取远程列表服务器信息
- Python按照不同的后缀把文件存入不同的文件夹下面(后缀分类)
- 20210725个人周复盘
- 100个Myeclipse6.5免费注册码