java程序中未被忽略的隐藏测试(codefights)

时间:2016-10-06 05:36:56

标签: java testing

这是作业:

我有4个输入数组,表示不同员工的信息

String[] names, boolean[] statuses, int[] projects, int[] tasks

它们将作为参数传递给我必须编写的方法。 输出应该是符合要求的员工姓名

要求是:

  • 每个阵列的第i个元素属于第i个雇员。员工人数不尽相同
  • 他/她的状态必须 false 才能将此员工视为下一个条件
  • 例如,如果 A B 状态为false,则任务较少的状态或者选择任务等于其他任务但项目较少的任务。为所有员工执行此操作。
  • 返回此员工的姓名(字符串)

数组的示例可能如下:

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是隐藏的。任何人都可以给我一些建议吗?

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];
}