Leetcode 911 在线选举

本文介绍了一种算法实现,用于处理实时投票选举中的领先候选人查询。通过预处理时间与候选人关联的数据,利用单调递增的时间数组快速定位并返回每个查询时刻的领先候选人。实现了一个TopVotedCandidate类,提供初始化和查询功能,适用于选举投票场景。
摘要由CSDN通过智能技术生成
题目

给你两个整数数组 persons 和 times 。在选举中,第 i 张票是在时刻为 times[i] 时投给候选人 persons[i] 的。

对于发生在时刻 t 的每个查询,需要找出在 t 时刻在选举中领先的候选人的编号。

在 t 时刻投出的选票也将被计入我们的查询之中。在平局的情况下,最近获得投票的候选人将会获胜。

实现 TopVotedCandidate 类:

TopVotedCandidate(int[] persons, int[] times) 使用 persons 和 times 数组初始化对象。
int q(int t) 根据前面描述的规则,返回在时刻 t 在选举中领先的候选人的编号。

解题思路

  由于 times 数组是单调递增,可以把 times 数组中每个时刻的当选人求出来,查询的时候直接查询最近的时间,给出输出即可。

代码
class TopVotedCandidate {
    List<Integer> result;
    private int[] times;
    private int[] persons;
    private int length;

    public TopVotedCandidate(int[] persons, int[] times) {
        this.times = times;
        this.length = times.length;
        this.persons = persons;
        this.result = new ArrayList<>();

        Map<Integer, Integer> map = new HashMap<>();
        map.put(-1, -1);

        int nowResult = -1;
        for (int person : persons) {
            map.put(person, map.getOrDefault(person, 0) + 1);
            if (map.get(person) >= map.get(nowResult)) {
                nowResult = person;
            }
            result.add(nowResult);
        }
    }

    public int q(int t) {
        int left = 0, right = length - 1;
        while (left < right) {
            int mid = left + (right - left + 1) / 2;
            if (times[mid] <= t) left = mid;
            else right = mid - 1;
        }
        return this.persons[left];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 类leetcode算法在线编译的答题系统源码可以包含以下几个关键部分: 1. 用户认证和管理:系统需要提供用户认证功能,允许用户进行注册、登录和注销操作。可以使用数据库存储用户信息,并对密码进行加密保护。通过认证,用户可以保存和管理自己的答题记录和排名。 2. 题目管理:系统需要提供题目的增删改查功能。每个题目包含一个标题、题目描述、输入要求、输出要求和示例等信息。可以使用数据库存储题目信息,并提供相应的接口供管理员进行管理。 3. 代码编辑和编译:系统需要提供一个代码编辑器,让用户可以编写算法代码。编辑器需要支持常见的编程语言,如C++、Java、Python等,并提供语法高亮和自动补全等功能。用户可以在编辑器中编写代码,并进行编译和运行测试。 4. 测试用例和结果判断:系统需要提供一个测试用例管理功能,允许管理员为每个题目设置多个测试用例。用户可以选择运行自己的代码,并查看运行结果。系统会自动判断用户代码的输出是否符合预期结果,并给出相应的反馈。 5. 答题记录和排名:系统需要记录用户的答题记录,包括题目信息、提交时间、编译结果和运行结果等。用户可以查看自己的答题记录,同时系统也会根据答题情况进行排名,展示最高得分和排名前几名的用户信息。 6. 用户交流和讨论:系统可以提供一个讨论区或论坛功能,供用户之间互相交流和提问。用户可以就题目的解法、算法思路等进行讨论,并给出相应的评论和回答。 以上是一个类leetcode算法在线编译的答题系统源码的基本结构和功能要求。具体实现可以根据需求进行适当调整和拓展。 ### 回答2: 类leetcode算法在线编译的答题系统源码是一个用于提供算法练习和在线编译运行的系统。该系统以类似leetcode的方式,提供了一系列算法题目,并给出了题目描述和输入输出示例。 源码中的核心功能包括题目列表、题目详情、代码编辑和编译运行等功能。用户可以在题目列表页面选择自己想要练习的题目,点击进入题目详情页面查看题目描述和示例。在代码编辑页面,用户可以输入自己的解答代码,并点击编译运行按钮执行代码,并查看运行结果。 在源码编写过程中,需要使用一些必要的技术和工具。前端开发可以使用HTML、CSS和JavaScript,通过前端框架进行页面布局和交互处理,提供用户友好的界面。后端开发可以使用一种后端框架,如node.js或Python等,设计数据库模型和处理请求的逻辑。同时需要使用一种编译器或解释器,支持对用户输入的代码进行编译运行,并返回结果。 在源码的实现过程中,需要考虑安全性和容错性。为了防止用户恶意代码或非法操作,可以使用输入验证和代码沙箱技术对用户输入进行过滤和安全检查。对于异常情况,可以通过异常处理机制捕获并给出相应的错误提示信息。 总之,类leetcode算法在线编译的答题系统源码应当具备题目管理、代码编辑和编译运行功能,并注意安全性和用户友好性。通过实现这样一个系统,可以帮助用户提升算法能力并加深对编程语言的理解和应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值