当前位置: 首页 > news >正文

MarsCode 49

20250222

  • 49 红包运气排行榜
  • java使用list实现
  • java使用Map+List实现

49 红包运气排行榜

在这里插入图片描述

java使用list实现

import java.util.*;

public class Main {
    public static List<String> solution(int n, List<String> s, List<Integer> x) {
        // 创建一个列表来存储参与者的信息
        List<Pair> participants = new ArrayList<>();
        
        // 将参与者的名字和金额存储到列表中
        for (int i = 0; i < n; i++) {
            participants.add(new Pair(s.get(i), x.get(i)));
        }
        
        // 对参与者列表进行排序
        Collections.sort(participants, new Comparator<Pair>() {
            @Override
            public int compare(Pair p1, Pair p2) {
                // 先按金额降序排序
                if (p1.amount != p2.amount) {
                    return p2.amount - p1.amount;
                }
                // 如果金额相同,保持原来的顺序
                return 0; // 这里需要保持原来的顺序
            }
        });
        
        // 提取排序后的名字列表
        List<String> result = new ArrayList<>();
        for (Pair p : participants) {
            result.add(p.name);
        }
        
        return result;
    }

    // 定义一个简单的 Pair 类来存储名字和金额
    static class Pair {
        String name;
        int amount;
        
        Pair(String name, int amount) {
            this.name = name;
            this.amount = amount;
        }
    }

    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")));
    }
}

发现报错:
在这里插入图片描述
原因在于:用户可以强多次,最后他抢到的金额需要累计,所以不能简单的使用list实现

java使用Map+List实现

import java.util.*;

public class Solution {

    public static List<String> solution(int n, List<String> s, List<Integer> x) {
        assert n == s.size() && n == x.size();

        Map<String, Integer> start = new HashMap<>();
        Map<String, Integer> cnt = new HashMap<>();

        for (int i = 0; i < n; i++) {
            String key = s.get(i);
            if (!start.containsKey(key)) {
                start.put(key, i);
            }
            cnt.put(key, cnt.getOrDefault(key, 0) + x.get(i));
        }

        // 创建一个列表,用于存储cnt中的键,以便进行排序
        List<String> keys = new ArrayList<>(cnt.keySet());
        // 根据cnt的值降序和在s中首次出现的位置升序进行排序
        Collections.sort(keys, (a, b) -> {
            int cmp = cnt.get(b).compareTo(cnt.get(a)); // 按cnt降序
            if (cmp == 0) {
                return Integer.compare(start.get(a), start.get(b)); // 如果cnt相同,则按首次出现位置升序
            }
            return cmp;
        });

        return keys;
    }

    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")));
    }
}

思路:

  1. 2个map,一个存储用户名和他抢的红包,1个存储他抢的顺序
  2. 使用list根据抢的红包数额对用户名排序
  3. 最后返回排序后的list

相关文章:

  • 细说STM32F407单片机1个ADC使用DMA同时采集3个输入通道的方法
  • ProfiNet转EtherNet/IP攻克罗克韦尔PLC与光伏电站监控系统连接难题的通讯配置技术
  • Pytorch实现之结合SE注意力和多种损失的特征金字塔架构GAN的图像去模糊方法
  • CLIP学习笔记
  • 安全运维,等保测试常见解决问题。
  • 智慧校园系统在学生学习与生活中的应用
  • RK Android11 WiFi模组 AIC8800 驱动移植调试记录
  • 力扣-回溯-37 解数独
  • JavaScript异步编程方式多,区别是什么?
  • 有时候通过无线上网,有线共享局域网通过该有线为网关进行上网,设置指定的网关IP信息
  • UE5 编辑器辅助/加强 插件搜集
  • C#使用Semantic Kernel:接入本地deepseek-r1
  • 【多模态处理篇五】【DeepSeek文档解析:PDF/Word智能处理引擎】
  • C#初级教程(6)——函数:从基础到实践
  • 后端之路——阿里云OSS云存储
  • 【JavaScript进阶】构造函数数据常用函数
  • 【AI】openEuler 22.03 LTS SP4安装 docker NVIDIA Container Toolkit
  • Java集合框架全解析:从LinkedHashMap到TreeMap与HashSet面试题实战
  • 微信小程序修改个人信息头像(uniapp开发)
  • 机器学习实战(11):时间序列预测——循环神经网络(RNN)与 LSTM
  • 黄晨光任中科院空间应用工程与技术中心党委书记、副主任
  • 呼和浩特65户业主被一房两卖,十年诉讼却难胜
  • 纪念|“补白大王”郑逸梅,从藏扇看其眼光品味
  • 秦洪看盘|涌现新逻辑,A股放量回升
  • 两个灵魂,一支画笔,意大利艺术伴侣的上海灵感之旅
  • 中国驻美大使谢锋:经贸关系不是零和游戏,滥施关税损人害己