JAVA 雇主招聘问题 | 豆包MarsCode AI 刷题

26 阅读3分钟

本文讲述了通过JAVA解决 AI刷题 498.雇主招聘问题

498.雇主招聘问题

问题描述:

小U作为一位雇主,想要招聘一位工人。现有 n 个人前来应聘,每个人都写下了他们期望的薪资。小U打算选择期望薪资最低的人,但为了避免纠纷,他只会选择在没有其他人提出相同期望薪资的情况下期望薪资最低的人。如果没有符合条件的人,他将不录用任何人。

你的任务是帮助小U找到合适的最低薪资。如果没有合适的人,输出 -1

题目要求:

题目所给的函数声明为:public static int solution(int n, int[] salaries),即该函数接收一个表示数组长度的int类型,和所求的int类型的数组。返回结果为薪资最低的工资,类型为int。

题目样例

样例1:

输入:n = 3 ,salaries = [3, 2, 1]

输出:1

样例2:

输入:n = 6 ,salaries = [1, 1, 4, 5, 1, 4]

输出:5

样例3:

输入:n = 3 ,salaries = [4, 4, 4]

输出:-1

解析:

创建可变数组

为了删除重复的数字,显然可变数组更加符合要求,因此可以使用ArrayList储存参数中的数组。通过遍历原数组,添加到ArrayList的方法获得可变数组。具体代码如下:

ArrayList<Integer> af = new ArrayList<>();
for (int i = 0; i < n; i++) {
    af.add(salaries[i]);
}

通过上述方式,可以将参数中的数组元素全部存储到af中。

删除重复元素

为了更好地删除重复元素,在此处介绍一种可以通过判断条件删除ArrayList中元素的方法:

removeIf(Predicate<? super E> filter)

例如:

ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);

// 移除所有偶数
list.removeIf(x -> x % 2 == 0);
System.out.println(list); // 输出: [1, 3]

经过判断为真的元素都会被删除。

在本题中,可通过遍历原数组,若存在两个元素相同但索引不同,就可以删除所有与该元素相等的元素,具体代码如下:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        if (salaries[j] == salaries[i] && i != j) {
            af.removeIf(Predicate.isEqual(salaries[j]));
        }
    }
}

判断返回结果

显然,最终得到的af内部不含有任何重复的元素。此时,如果af的大小为0,即原数组没有单独的元素,无合适的人选,便可返回-1。代码如下:

if (af.size() == 0) {
    return -1;
}

当af的大小不为1时,即原数组中存在单独的数字,有可以选择的人选,此时只需要遍历ArrayList,找到最小的数字,返回该数字便得到了最低薪资。具体代码如下:

int min_index = 0;
for (int i = 0; i < af.size(); i++) {
    if (af.get(i) < af.get(min_index)) {
    min_index = i;
    }
}
return af.get(min_index);

具体代码:

综上,将所有的代码部分结合,便可以得到最终的代码:

public static int solution(int n, int[] salaries) {
    ArrayList<Integer> af = new ArrayList<>();
    for (int i = 0; i < n; i++) {
        af.add(salaries[i]);
    }
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (salaries[j] == salaries[i] && i != j) {
                af.removeIf(Predicate.isEqual(salaries[j]));
            }
        }
    }
    if (af.size() == 0) {
        return -1;
    }
    int min_index = 0;
    for (int i = 0; i < af.size(); i++) {
        if (af.get(i) < af.get(min_index)) {
            min_index = i;
        }
    }
    return af.get(min_index);
}