【华为OD题库-091】选举拉票-java

题目

现在你要竞选一个县的县长。你去对每一个选民进行了调查。你已经知道每一个人要选的人是谁,以及要花多少钱才能让这个人选你。现在你想要花最少的钱使得你当上县长。你当选的条件是你的票数比任何一个其它候选人的多(严格的多,不能和他们中最多的相等)。请计算一下最少要花多少钱。
输入
单组测试数据。
第一行有一个整数(1≤n≤10^5),表示这个县的选民数目。
接下来有n行,每一行有两个整数ai和bi(0<=10^5,0<=bi<=10^4),表示第i个选民选的是第ai号候选人,想要让他选择自己就要花bi的钱。你是0号候选人(所以,如果一个选民选你的话ai就是0,这个时候bi也肯定是0)。
输出
输出一个整数表示花费的最少的钱。
示例1:
输入∶
5
1 2
1 2
1 2
2 1
0 0
输出:
3

思路

大致同【华为OD题库-041】人气最高的店铺-java

之前是使用的自定义对象存储的数据,现在直接存入list<int []>中。
之前输入5个店铺,那么店铺编号范围一定在:0~4。所以可以使用int[]数组存放每个店铺的票情况,现在不确定有多少个竞选者,使用map存放每个竞选者的的票情况

题解

package hwod;import java.util.*;public class VoteMagistrate {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[][] nums = new int[n][2];for (int i = 0; i < n; i++) {for (int j = 0; j < 2; j++) {nums[i][j] = sc.nextInt();}}System.out.println(voteMagistrate(nums));}private static Map<Integer, Integer> voteMap = new HashMap<>();private static int res=Integer.MAX_VALUE;private static int voteMagistrate(int[][] nums) {List<int[]> list = new ArrayList<>();for (int i = 0; i < nums.length; i++) {voteMap.put(nums[i][0], voteMap.getOrDefault(nums[i][0], 0) + 1);if (nums[i][0] != 0) list.add(nums[i]);}int maxIdx = 0;//获取票数最多的竞选人代号for (Integer k : voteMap.keySet()) {if (k != 0 && voteMap.get(k) >= voteMap.getOrDefault(maxIdx, 0)) {maxIdx = k;}}if (maxIdx == 0) return 0;list.sort((o1, o2) -> {if (o1[0] != o2[0]) return o1[0] - o2[0];return o1[1] - o2[1];});int[] used = new int[list.size()];dfs(list, 0, used, 0);return res;}private static void dfs(List<int[]> list, int start, int[] used, int price) {if (check(voteMap)) {res = Math.min(price, res);return;}for (int i = start; i < list.size(); i++) {int[] cur = list.get(i);if (i > 0 && list.get(i)[0] == list.get(i - 1)[0] && used[i - 1] == 0) continue;used[i] = 1;voteMap.put(cur[0], voteMap.get(cur[0]) - 1);voteMap.put(0, voteMap.getOrDefault(0, 0) + 1);dfs(list, i + 1, used, price + cur[1]);used[i] = 0;voteMap.put(0, voteMap.get(0) - 1);voteMap.put(cur[0], voteMap.get(cur[0]) + 1);}}private static boolean check(Map<Integer, Integer> voteMap) {//判断0号是不是唯一最大的票int target = voteMap.getOrDefault(0, 0);for (Integer key : voteMap.keySet()) {if (key != 0 && voteMap.get(key) >= target) {return false;}}return true;}
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Jemeter对HTTP接口压测

我们不应该仅仅局限于某一种工具&#xff0c;性能测试能使用的工具非常多&#xff0c;选择适合的就是最好的。笔者已经使用Loadrunner进行多年的项目性能测试实战经验&#xff0c;也算略有小成&#xff0c;任何性能测试&#xff08;如压力测试、负载测试、疲劳强度测试等&#…

华为OD机试 - 文件缓存系统(Java JS Python)

题目描述 请设计一个文件缓存系统,该文件缓存系统可以指定缓存的最大值(单位为字节)。 文件缓存系统有两种操作: 存储文件(put)读取文件(get)操作命令为: put fileName fileSizeget fileName存储文件是把文件放入文件缓存系统中; 读取文件是从文件缓存系统中访问已…

性能测试之Artillery(示例及指标)

官方文档&#xff1a;https://www.artillery.io/docs/get-started/first-test PS:文档挺详细&#xff0c;教程比较全 示例 config:http:extendedMetrics: truetarget: http://127.0.0.1:8005phases:- duration: 10 # 持续时间arrivalRate: 10 # 每秒创建10个用户rampTo: 100 …

SwitchHosts - 管理、切换多个 hosts 方案的工具

一、hosts文件 简单的说&#xff0c;hosts文件是用于本地dns服务的&#xff0c;采用ip 域名的格式写在一个文本文件当中&#xff0c;Hosts是一个没有扩展名的系统文件&#xff0c;可以用记事本等工具打开&#xff0c;其作用就是将一些常用的网址域名与其对应的IP地址建立一个关…

Tor网络原理详解

引入 匿名通信是一种通过采用数据转发、内容加密、流量混淆等措施来隐藏通信内容及关系的隐私保护技术。为了提高通信的匿名性&#xff0c;这些数据转发链路通常由多跳加密代理服务节点构成&#xff0c;而所有这些节点即构成了匿名通信系统&#xff08;或称匿名通信网络&#…

Linux的双网口(内网+外网)的IP报文转发

一、背景&#xff1a; PC1的主机与PC2的主机不是同一个网段&#xff0c;中间经过一个双网口Linux设备中转&#xff0c;以实现PC1和PC2的数据报文交互。 二、实物&#xff1a; PC1主机的IP地址&#xff1a;192.178.111.111 PC2主机的IP地址&#xff1a; 192.168.130.32 …

在排序数组中查找元素的第一个和最后一个位置(Java详解)

一、题目描述 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示…

Electron 安装不成功

1、在项目根目录下新建.npmrc文件 在文件中写入 ELECTRON_MIRRORhttp://npm.taobao.org/mirrors/electron/2、删除node_modules&#xff0c;重新执行安装命令

OpenTiny Vue 组件库3.12.0 发布:文档大优化!增加水印和二维码两个新组件

非常高兴跟大家宣布&#xff0c;2023年11月30日&#xff0c;OpenTiny Vue 发布了 v3.12.0 &#x1f389;。 OpenTiny 每次大版本发布&#xff0c;都会给大家带来一些实用的新特性&#xff0c;10.24 我们发布了 v3.11.0 版本&#xff0c;增加了富文本、ColorPicker 等4个新组件…

.QT信号槽,如何同步异步?

同步 --- 直连 DirectConnection&#xff08;直连方式&#xff09; 异步 --- 等待连 QueuedConnection&#xff08;排队方式&#xff09; 通常使用的connect&#xff0c;只用了四个参数&#xff0c;实际上最后一个参数使用的是Qt::AutoConnection类型。但如果信号和槽函数是在…

linux 内核同步互斥技术之读写自旋锁

读写自旋锁 读写自旋锁&#xff08;通常简称读写锁&#xff09;是对自旋锁的改进&#xff0c;区分读者和写者&#xff0c;允许多个读者同时进入临界区&#xff0c;读者和写者互斥&#xff0c;写者和写者互斥。 如果读者占有读锁&#xff0c;写者申请写锁的时候自旋等待。如果写…

数据库通用语言DQL-MySQL及语法练习 建议码住,多看几遍!!!!!!!

DQL&#xff08;数据查询语言&#xff09; 语法&#xff1a; SELECT字段列表 FROM表名字段 WHERE条件列表 GROUP BY分组字段列表 HAVING分组后的条件列表 ORDER BY排序字段列表 LIMIT分页参数基础查询 查询多个字段&#xff1a; SELECT 字段1, 字段2, 字段3, ... FROM 表名;…

linux下查看进程资源ulimit

ulimit介绍与使用 ulimit命令用于查看和修改进程的资源限制。下面是ulimit命令的使用方法&#xff1a; 查看当前资源限制&#xff1a; ulimit -a 这将显示当前进程的所有资源限制&#xff0c;包括软限制和硬限制。查看或设置单个资源限制&#xff1a; ulimit -<option> …

喜报丨迪捷软件入选2023年浙江省信息技术应用创新典型案例

12月6日&#xff0c;浙江省经信厅公示了2023年浙江省信息技术应用创新典型案例入围名单。本次案例征集活动&#xff0c;由浙江省经信厅、省密码管理局、工业和信息化部网络安全产业发展中心联合组织开展&#xff0c;共遴选出24个优秀典型解决方案&#xff0c;迪捷软件“基于全数…

安装鸿蒙开发者工具DevEco Studio

1.进入官网下载工具 https://developer.harmonyos.com/cn/develop/deveco-studio/ 选择您电脑对应的系统下载即可 2.安装 很简单直接点击“next”,此处不做赘述 3.配置环境 安装完成后&#xff0c;打开DevEco Studio 会提示配置环境。安装node.js和ohpm 如果不小心关了&a…

DevEco Studio无法识别本地模拟器设备的解决方法

遇到了一个问题&#xff0c;之前测试无误的本地模拟器&#xff0c;运行后设备栏中无法识别了。 此时保持模拟器处于开启状态&#xff0c;关闭DevEco Studio窗口重新启动后&#xff0c;发现重新识别设备了。

Android手机使用Termux终端模拟器

Termux 是 Android 平台上的一个终端模拟器&#xff0c;可以在 Android 手机上模拟 Linux 环境。它提供命令行界面&#xff0c;并且提供了功能健全的包管理工具&#xff08;pkg&#xff09;。另外就是 Termux 不需要 root 权限&#xff0c;安装后默认产生一个用户&#xff0c;可…

【CASS精品教程】cass11提示“请不要在虚拟机中运行此程序”的解决办法

文章目录 一、问题提示二、解决办法一、问题提示 按照正常安装教程安装好南方测绘cass 11之后,打开的时候可能会有以下提示:请不要在虚拟机中运行此程序,如下图所示: 遇到问题,咱们就想办法解决问题,下面将自己尝试的方法及最终解决情况跟大家说一下,供参考。 二、解决…

Linux---压缩和解压缩命令

1. 压缩格式的介绍 Linux默认支持的压缩格式: .gz.bz2.zip 说明: .gz和.bz2的压缩包需要使用tar命令来压缩和解压缩.zip的压缩包需要使用zip命令来压缩&#xff0c;使用unzip命令来解压缩 压缩目的: 节省磁盘空间 2. tar命令及选项的使用 命令说明tar压缩和解压缩命令 …

Linux centos7安装redis 6.2.14 gz并且使用systemctl为开机自启动 / 彻底删除 redis

1.下载 && 减压 wget http://download.redis.io/releases/redis-6.2.14.tar.gz tar -zvxf redis-6.2.14.tar.gz 2.编译&#xff08;分开运行&#xff09; cd redis-6.2.14 make cd src make install 安装目录展示 3.redis.conf 配置更改 daemonize yes supervised s…