Java--最大数✧SQL--部门工资前三高的所有员工

一、最大数


题目:

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例 1:
输入:nums = [10,2]
输出:"210"

示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"

示例 3:
输入:nums = [1]
输出:"1"

示例 4:
输入:nums = [10]
输出:"10"

来源:力扣(LeetCode)【链接:】


此题主要是考验对比较器的重写,public void sort(Comparator c)

class Solution {
    public static void main(String[] args) {
        Solution solution=new Solution();
        int[] nums = {3,30,34,5,9};
        System.out.println(solution.largestNumber(nums));
    }

    public String largestNumber(int[] nums) {
        ArrayList<String> array=new ArrayList();
        for (int i = 0; i < nums.length; i++) {
            array.add(String.valueOf(nums[i]));
        }
        //重写比较器,此处直接使用了lambda表达式
        array.sort((a,b)->{
            a=a+b;
            b=b+a;
            //排序
            return b.compareTo(a);
        });
        //普通写法
//        array.sort(new Comparator() {
//            @Override
//            public int compare(String o1, String o2) {
//                o1=o1+o2;
//                o2=o2+o1;
//                return o2.compareTo(o1);
//            }
//        });

        StringBuilder stringBuilder=new StringBuilder();
        for (int i = 0; i < array.size(); i++) {
            stringBuilder.append(array.get(i));
        }
        if(stringBuilder.charAt(0)=='0'){
            return "0";
        }
        return stringBuilder.toString();
    }
}

在这里插入图片描述


二、部门工资前三高的所有员工


Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId 。
Java--最大数✧SQL--部门工资前三高的所有员工_第1张图片
Department 表包含公司所有部门的信息。
Java--最大数✧SQL--部门工资前三高的所有员工_第2张图片
编写一个 SQL 查询,找出每个部门获得前三高工资的所有员工。例如,根据上述给定的表,查询结果应返回:
Java--最大数✧SQL--部门工资前三高的所有员工_第3张图片
解释:
IT 部门中,Max 获得了最高的工资,Randy 和 Joe 都拿到了第二高的工资,Will 的工资排第三。销售部门(Sales)只有两名员工,Henry 的工资最高,Sam 的工资排第二。
来源:力扣(LeetCode)【链接:】


解题思路:

首先题目要求我们获取每个项目组中薪资前三的工人,其中重复的也要显示出来,所以难点在于如何找出每个项目组中前三的人。假设两个Employee表e1,e2,e2.Salary的工资与e1.Salary的工资进行比较,(并要求e1.departmentid=e2.departmentid)也就是一组,这样我们通过e1.Salary

SELECT
	d.NAME AS Department,
	e1.NAME AS Employee,
	e1.Salary AS Salary 
FROM
	Employee AS e1
	INNER JOIN Department d ON e1.departmentid = d.id 
	WHERE#算出<3的前三个人
	(
	#重点:完成前三人的筛选
	SELECT
	#去重是为了有工资的人,导致排名不对
		count( DISTINCT e2.Salary ) 
	FROM
		Employee e2 
	WHERE
	#控制比较在一个组内进行比较
		e1.departmentid = e2.departmentid 
	AND e1.Salary < e2.Salary 
	)<3

Java--最大数✧SQL--部门工资前三高的所有员工_第4张图片


你可能感兴趣的:(日常一学,java,sql,leetcode)