题解3| 豆包MarsCode AI刷题

78 阅读2分钟

问题描述

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

你的任务是帮助小U找到合适的最低薪资。如果没有合适的人,输出 -1。 import java.util.Arrays; import java.util.HashMap; import java.util.Map;

public class Main { public static int solution(int n, int[] salaries) { // 使用HashMap统计每个薪资出现的次数 Map<Integer, Integer> salaryCount = new HashMap<>(); for (int salary : salaries) { salaryCount.put(salary, salaryCount.getOrDefault(salary, 0) + 1); }

    // 遍历HashMap,找到只出现一次且最小的薪资
    int minSalary = Integer.MAX_VALUE;
    for (Map.Entry<Integer, Integer> entry : salaryCount.entrySet()) {
        if (entry.getValue() == 1 && entry.getKey() < minSalary) {
            minSalary = entry.getKey();
        }
    }

    // 如果没有符合条件的薪资,返回-1
    return minSalary == Integer.MAX_VALUE ? -1 : minSalary;
}

public static void main(String[] args) {
    System.out.println(solution(3, new int[]{3, 2, 1}) == 1);
    System.out.println(solution(6, new int[]{1, 1, 4, 5, 1, 4}) == 5);
    System.out.println(solution(3, new int[]{4, 4, 4}) == -1);
}

} 题目要求我们找到期望薪资最低且唯一的应聘者。以下是解题思路和步骤: 统计薪资出现次数:我们需要一个数据结构来记录每个薪资出现的次数。这里我们使用HashMap,其中键是薪资,值是该薪资出现的次数。 遍历薪资数组:将每个应聘者的薪资添加到HashMap中,如果薪资已经存在,则增加其计数。 查找唯一最低薪资:遍历HashMap,找到出现次数为1且薪资最低的应聘者。如果找到多个符合条件的薪资,我们只关心最低的那个。 返回结果:如果找到了符合条件的薪资,则返回该薪资;如果没有找到,则返回-1。 以下是具体的实现步骤: 初始化一个HashMap来存储薪资及其出现次数。 遍历薪资数组,更新HashMap。 初始化一个变量minSalary来记录最低的唯一薪资,初始值设为Integer.MAX_VALUE。 遍历HashMap,对于每个键值对,如果薪资出现次数为1且薪资小于minSalary,则更新minSalary。 最后,检查minSalary是否仍为Integer.MAX_VALUE,如果是,说明没有找到符合条件的薪资,返回-1;否则返回minSalary。 代码示例已经给出,它按照上述步骤实现了题目的要求。在main方法中,我们测试了几个不同的场景,确保代码的正确性。