字节青训营 红包运气排行榜
👨🏫 题目地址
import java.util.*;public class Main {// 定义一个用户红包类static class UserRedPacket {String name; // 用户名int amount; // 红包金额UserRedPacket(String name, int amount) {this.name = name;this.amount = amount;}}public static List<String> solution(int n, List<String> s, List<Integer> x) {// 创建用户红包列表List<UserRedPacket> userRedPackets = new ArrayList<>();// 创建一个 Map 记录用户名和对应的红包金额Map<String, Integer> userAmountMap = new HashMap<>();// 遍历输入的用户名和红包金额for (int i = 0; i < n; i++) {String userName = s.get(i); // 获取当前用户名int amount = x.get(i); // 获取当前红包金额// 如果用户名已经存在,累加金额if (userAmountMap.containsKey(userName)) {userAmountMap.put(userName, userAmountMap.get(userName) + amount);} else {// 否则,添加新的用户名和金额userAmountMap.put(userName, amount);userRedPackets.add(new UserRedPacket(userName, amount));}}// 更新用户红包列表中的金额for (UserRedPacket user : userRedPackets) {user.amount = userAmountMap.get(user.name);}// 根据红包金额进行稳定排序userRedPackets.sort((a, b) -> {if (a.amount == b.amount) {return 0; // 金额相同,保持原有顺序} else {return b.amount - a.amount; // 金额不同,按金额降序排序}});// 提取排序后的用户名List<String> result = new ArrayList<>();for (UserRedPacket user : userRedPackets) {result.add(user.name);}return result;}public static void main(String[] args) {// 测试用例System.out.println(solution(4, Arrays.asList("a", "b", "c", "d"), Arrays.asList(1, 2, 2, 1)).equals(Arrays.asList("b", "c", "a", "d")));System.out.println(solution(3, Arrays.asList("x", "y", "z"), Arrays.asList(100, 200, 200)).equals(Arrays.asList("y", "z", "x")));System.out.println(solution(5, Arrays.asList("m", "n", "o", "p", "q"), Arrays.asList(50, 50, 30, 30, 20)).equals(Arrays.asList("m", "n", "o", "p", "q")));}
}