题目链接:https://leetcode-cn.com/problems/online-election/

题解汇总:https://zhanglong.blog.csdn.net/article/details/121071779


题目描述

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

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

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

实现 TopVotedCandidate 类:

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

示例:
输入:
[“TopVotedCandidate”, “q”, “q”, “q”, “q”, “q”, “q”]
[[[0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]], [3], [12], [25], [15], [24], [8]]

输出:
[null, 0, 1, 1, 0, 0, 1]

解释:
TopVotedCandidate topVotedCandidate = new TopVotedCandidate([0, 1, 1, 0, 0, 1, 0], [0, 5, 10, 15, 20, 25, 30]);
topVotedCandidate.q(3); // 返回 0 ,在时刻 3 ,票数分布为 [0] ,编号为 0 的候选人领先。
topVotedCandidate.q(12); // 返回 1 ,在时刻 12 ,票数分布为 [0,1,1] ,编号为 1 的候选人领先。
topVotedCandidate.q(25); // 返回 1 ,在时刻 25 ,票数分布为 [0,1,1,0,0,1] ,编号为 1 的候选人领先。(在平局的情况下,1 是最近获得投票的候选人)。
topVotedCandidate.q(15); // 返回 0
topVotedCandidate.q(24); // 返回 0
topVotedCandidate.q(8); // 返回 1


题解:

票选是在离散时间上发生的,每次更新只会对票数+1。 基于此,我们只需按照时间顺序遍历,找出每个时间点票数最高的人。

但由于时间是不连续的,最后给出任意一个时间点查询时,我们还需要进行一次二分搜索。
找到到当前时间点最近的一次投票时间点,那个时候对应的最领先的候选人就是答案。

我将这套方法称之为节点预处理。即不需要将每个值都预处理,只处理关键节点即可。


class TopVotedCandidate {private:vector<int> times;unordered_map<int, int>vis, res;int n;public:TopVotedCandidate(vector<int>& persons, vector<int>& times) {this->times = times;n = persons.size();int max_val = 0;               // 保存当前最大的值for (int i = 0; i < n; ++i) {vis[persons[i]]++;if (vis[persons[i]] >= max_val) {max_val = vis[persons[i]];res[times[i]] = persons[i];} else {res[times[i]] = res[times[i-1]];}}}int q(int t) {int l = 0, r = n-1, m;while (l < r) {m = (l + r) / 2;if (times[m] == t) return res[times[m]];else if (t > times[m]) l = m+1;else r = m-1;}if (times[l] > t) return res[times[l-1]];else return res[times[l]];}
};

【解题报告】Leecode911. 在线选举——Leecode每日一题系列相关推荐

  1. 【解题报告】Leecode 519. 随机翻转矩阵——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十六天 题目链接:https://leetcode-cn.com/problems/random-flip-matrix/solution/ 题解汇总:https://zh ...

  2. 【解题报告】Leecode 438. 找到字符串中所有字母异位词——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十七天 题目链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string/ 题解汇总:https:// ...

  3. 【解题报告】Leecode 859. 亲密字符串——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十四天 题目链接:https://leetcode-cn.com/problems/buddy-strings/ 题解汇总:https://zhanglong.blog.c ...

  4. 【解题报告】Leecode 423. 从英文中重建数字——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十五天 题目链接:https://leetcode-cn.com/problems/reconstruct-original-digits-from-english/ 题解 ...

  5. 【解题报告】Leecode 384. 打乱数组——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十三天 题目链接:https://leetcode-cn.com/problems/shuffle-an-array/ 题解汇总:https://zhanglong.blo ...

  6. 解题报告-Leecode 563. 二叉树的坡度——Leecode每日一题系列

    今天是坚持每日一题打卡的第二十二天 题目链接:https://leetcode-cn.com/problems/binary-tree-tilt/ 题解汇总:https://zhanglong.blo ...

  7. 【解题报告】Leecode 237. 删除链表中的节点——Leecode每日一题系列

    今天是坚持每日一题打卡的第八天 题目链接:https://leetcode-cn.com/problems/minimum-operations-to-convert-number/ 题解汇总:htt ...

  8. 【解题报告】Leecode 500. 键盘行——Leecode每日一题系列

    今天是坚持每日一题打卡第七天 题目描述 给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词.键盘如下图所示. 美式键盘 中: 第一行由字符 "qwert ...

  9. 【题解报告】Leecode367. 有效的完全平方数——Leecode每日一题系列

    今天是坚持每日一题打卡的第九天 题目链接:https://leetcode-cn.com/problems/valid-perfect-square/ 题解汇总:https://zhanglong.b ...

最新文章

  1. java对象转xml 高性能_通过实例学习JAVA对象转成XML输出
  2. python线性回归算法简介_Python机器学习(二):线性回归算法
  3. Java Fork/Join 框架
  4. MySQL(四)字段及常用函数
  5. 使用Redis set 解决数据的唯一性问题
  6. 界面设计与测试的规范
  7. 使用Xunit来进行单元测试
  8. 标准h5的定位_不但亲民还安全 红旗H5车门/防撞梁拆解
  9. 金山安全联手方正科技 为用户提供最佳互联网安全环境
  10. Linux内核启动中驱动初始化过程
  11. Excel曲线拟合及拟合公式不正确问题
  12. SPSS Modeler 和spss statistics有什么不同
  13. 计算机本科必备知识基础知识,计算机基础知识(本科).doc
  14. 给网页添加背景图片 html+css
  15. 给所有大龄测试员写的一份信
  16. pageBean的介绍
  17. (入门)前端开发的简单介绍
  18. 再也找不到理由 打扰你_伤感日志
  19. python代码计算字数_如何用python计算文件的字数
  20. usb网卡转接口被识别为光盘

热门文章

  1. 2_6 CompositeMode.cpp 组合模式
  2. OkHttp3中的代理与路由
  3. tomcat源码运行
  4. 绝不重新定义继承而来的缺省值参数
  5. LiveVideoStack线上分享第五季(五):用FFmpeg搭建基于CNN的视频分析方案
  6. 通过WebAssembly在移动端解码H.265
  7. 腾讯AI Lab联合清华,港中文长文解析图深度学习的历史、最新进展到应用
  8. 从零开始的C++网络编程
  9. 如何不用服务器来开发一个小游戏
  10. AI:你们是不是在等一顶红帽子?