老虎证券 8.9 Java笔试 ak
老虎证券的笔试题,相对来说还是比较简单的,两道题都ac了(近期唯一一次)
第一题:
输入:思路:找出最小的上车站点和最大的下车站点,计算出在这个区间中,什么时候有最多的乘客在车上,找到这个最多乘客在车上的数量,除以capacity,再+1就ok了trips:二维int数组,用于表示一组乘客的行程信息,其中`trip[i]`表示第i组乘客,`trip[i][0]`表示第i组乘客的乘客数量,`trip[i][1]`表示上车站点,`trip[i][2]`表示下车站点capacity: int 类型,表示每辆车最多能承载多少名乘客
输出:最少需要多少辆车可以满足乘客需求
代码:
public static int minCarCount (int[][] trips, int capacity) {
// write code here
Arrays.sort(trips, ((o1, o2) -> o1[1] - o2[1]));
int k = 0;
int start = trips[0][1];
int end = trips[trips.length-1][2];
for (int i = start; i < end; i++) {
float x = i + 0.5f;
int count = 0;
for (int j = 0; j < trips.length; j++) {
if (x > trips[j][1] && x < trips[j][2]) {
count += trips[j][0];
}
}
k = Math.max(count, k);
}
return k/5+1;
}
第二题:
输入:要求:当前等级大于任务所需最低等级时,才能选择该任务x:int整型 需要完成的任务数量 level: int整型 初始等级tasks: int整型二维数组 表示可供选择的任务,tasks[i][0]表示第i个任务所需的最低等级,task[i][1]表示第i个任务完成后能提升的等级
输出:
做完x个任务后能达到的最高等级思路:
很明显的贪心,每次选择任务的时候,都尽量去选择可以获得等级最多的任务就ok了
代码:
public static int maxLevel (int x, int level, int[][] tasks) {
// write code here
if (x == 0) {
return level;
}
Arrays.sort(tasks, (o1, o2) -> o1[0] - o2[0]);
if (level < tasks[0][0]) {
return level;
}
Arrays.sort(tasks, (o1, o2) -> o2[1] - o1[1]);
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < x; i++) {
for (int j = 0; j < tasks.length; j++) {
if (!set.contains(j) && level >= tasks[j][0]) {
level += tasks[j][1];
set.add(j);
break;
} else if (set.contains(j)) {
continue;
}
}
}
return level;
}
查看13道真题和解析