问题来源:
2017滴滴出行面试题
问题描述:
链接:https://www.nowcoder.com/questionTerminal/d2cced737eb54a3aa550f53bb3cc19d0?orderByHotValue=0&commentTags=Java
来源:牛客网
某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大
输入描述:
输入包括m+2行。 第一行两个整数n(1 <= n <= 50000),m(1 <= m <= 50000) 第二行为n个参数a,即每个桌子可容纳的最大人数,以空格分隔,范围均在32位int范围内。 接下来m行,每行两个参数b,c。分别表示第i批客人的人数和预计消费金额,以空格分隔,范围均在32位int范围内。输出描述:
输出一个整数,表示最大的总预计消费金额示例1
输入3 5 2 4 2 1 3 3 5 3 7 5 9 1 10
输出
20
解题思路:
消费金额由高到低,人数由少到多检索顾客;
容量由小到大检索桌子;
检测到于顾客人数相等的桌子,总金额加上该顾客群体的消费金额;并从桌子序列里删去该桌子;
代码实现
package ali.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scan = new Scanner(System.in);
int lenDesk = scan.nextInt();
List<Integer> desk = new ArrayList<>(lenDesk);
// desk.add(2);desk.add(4);desk.add(2);
// int[][] customer = {{1,3},{3,5},{3,7},{5,9},{1,10}};
int lenCustomer = scan.nextInt();
int[][] customer = new int[lenCustomer][];
//读入桌子数据并降序排列(降序:从后往前检索桌子时,删除桌子时不会打乱前面桌子的索引)
for (int i = 0; i < lenDesk; i++) {
desk.add(scan.nextInt());
}
Collections.sort(desk,Collections.reverseOrder());
//读入顾客
for (int i = 0; i < lenCustomer; i++) {
customer[i] = new int[] {scan.nextInt(),scan.nextInt()};
}
//按照消费金额由高到低,人数由少到多对顾客进行排序
//排位越靠后,优先级越高
Arrays.sort(customer,new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[1] > o2[1])
return 1;
else
if(o1[1] < o2[1])
return -1;
else
if(o1[0] < o2[0])
return 1;
else
if(o1[0] > o2[0])
return -1;
else
return 0;
}
});
int sum = 0;
for (int i = customer.length-1; i >= 0; i--) {
for (int j = desk.size()-1; j >= 0; j--) {
if(desk.get(j) >= customer[i][0]) {
sum += customer[i][1];
desk.remove(j);
break;
}
}
}
System.out.println(sum);
}
}
显示运行效果:
您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为50.00%
测试用例:
21634 18538
对应输出应该为:
92696455276
你的输出为:
-1792825236
从我的代码里不可能出现只输入2个数据的输入情况。
所以这个是什么意思???显示错误???