这是作业:
我有4个输入数组,表示不同员工的信息
String[] names, boolean[] statuses, int[] projects, int[] tasks
它们将作为参数传递给我必须编写的方法。 输出应该是符合要求的员工姓名
要求是:
数组的示例可能如下:
names = ["John", "Martin"], statuses = [false, false],
projects = [2, 1] and tasks = [16, 5],
输出应为:
smartAssigning(names, statuses, projects, tasks) = "Martin".
这是我的代码:(这只是方法)
String smartAssigning(String[] names, boolean[] statuses, int[] projects, int[] tasks) {
String name = null;
int task = tasks[0];
int order = 0;
int mainOrder = 0;
int project;
int[] list = new int[names.length];
for (int i = 1; i < tasks.length; i++) {
if (tasks[i] < task && statuses[i] == false) {
task = tasks[i];
}
}
for (int i = 0; i < tasks.length; i++) {
if (task == tasks[i]) {
list[order] = i;
order++;
}
}
project = list[0];
if (order > 1) {
for (int i = 1; i < order; i++) {
if (project > projects[list[i]]) {
project = projects[list[i]];
mainOrder = list[i];
}
}
} else mainOrder = list[0];
return names[mainOrder];
}
问题是我无法通过11项可用测试中的2项。但那些2是隐藏的。任何人都可以给我一些建议吗?
答案 0 :(得分:0)
请检查以下代码: String smartAssigning(String [] names,boolean [] status,int [] projects,int [] tasks){
String assignTo = null;
int minvaluep = projects[0];
int minvaluepi = 0;
int minvaluet = tasks[0];
int minvalueti = 0;
int duplicate = -1;
for (int j = 0; j < names.length; j++) {
if (statuses[j] == false) {
if (tasks[j] < minvaluet) {
minvaluet = tasks[j];
minvalueti = j;
}
assignTo = names[minvalueti];
}
}
for (int k = 0; k < projects.length; k++) {
for (int l = k + 1; l < projects.length; l++) {
if (String.valueOf(projects[k]).equals(String.valueOf(projects[l]))) {
duplicate = k;
}
}
}
for (int j = 0; j < names.length; j++) {
if (statuses[j] == false) {
if (tasks[j] < minvaluet) {
minvaluet = tasks[j];
minvalueti = j;
}
}
}
if (duplicate > -1) {
for (int i = 0; i < names.length; i++) {
if (statuses[i] == false) {
if (projects[i] < minvaluep) {
minvaluep = projects[i];
minvaluepi = i;
}
}
}
assignTo = names[minvaluepi];
}
return assignTo;
}
答案 1 :(得分:0)
我今天在一次编码采访中遇到了这个问题。 我的解决方案通过了所有测试案例。 基本上,我创建了一个具有所有给定值的哈希表,并根据要求对名称数组进行了排序。 这是我的解决方法,
String smartAssigning(String[] names, boolean[] statuses, int[] projects, int[] tasks) {
HashMap<String, int[]>map=new HashMap<>();
for(int i=0; i<names.length;i++){
int[] obj=new int[3];
obj[0]=tasks[i];
obj[1]=projects[i];
obj[2]= (statuses[i])?1:0;
map.put(names[i],obj);
}
Arrays.sort(names, (a,b)->
{
if(map.get(a)[2]==0 && map.get(b)[2]==0)
if(map.get(a)[0]-map.get(b)[0] == 0)
return map.get(a)[1]-map.get(b)[1];
else
return map.get(a)[0]-map.get(b)[0];
else
return (map.get(a)[2]==0)? -1:1;
}
);
return names[0];
}