力扣随机一题 哈希表 排序 数组

  • 博客主页:誓则盟约
  • 系列专栏:IT竞赛 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍ 

2491.划分技能点相等的团队【中等

题目:

给你一个正整数数组 skill ,数组长度为 偶数 n ,其中 skill[i] 表示第 i 个玩家的技能点。将所有玩家分成 n / 2 个 2 人团队,使每一个团队的技能点之和 相等 。

团队的 化学反应 等于团队中玩家的技能点 乘积 。

返回所有团队的 化学反应 之和,如果无法使每个团队的技能点之和相等,则返回 -1 。

示例 1:

输入:skill = [3,2,5,1,3,4]
输出:22
解释:
将玩家分成 3 个团队 (1, 5), (2, 4), (3, 3) ,每个团队的技能点之和都是 6 。
所有团队的化学反应之和是 1 * 5 + 2 * 4 + 3 * 3 = 5 + 8 + 9 = 22 。

示例 2:

输入:skill = [3,4]
输出:12
解释:
两个玩家形成一个团队,技能点之和是 7 。
团队的化学反应是 3 * 4 = 12 。

示例 3:

输入:skill = [1,1,2,3]
输出:-1
解释:
无法将玩家分成每个团队技能点都相等的若干个 2 人团队。

分析问题:

思路1:

        这里可以先根据数组的长度来获得平均和key值,然后对skill数组进行一个排序,那么如果想等于key值的话,只能让最大值+最小值,如果有一个不符合题意则直接return -1。将符合题意的两个值的乘积全部加起来,最后return 就是结果。思路很简单。但是时间复杂度相比之下略高。

思路2:

        首先计算出所有技能值的总和以及每个团队理想的技能值总和。然后通过遍历技能值及其出现次数,判断能否将技能值两两分组,使得每组的技能值总和都等于理想值,同时计算出所有分组产生的化学效能总和。如果在过程中出现无法满足分组条件的情况,就返回 -1 ,否则返回计算得到的化学效能总和。


代码实现:

思路1代码实现:
class Solution:def dividePlayers(self, skill: List[int]) -> int:skill.sort()ans, s = 0, skill[0] + skill[-1]for i in range(len(skill) // 2):x, y = skill[i], skill[-1 - i]if x + y != s: return -1ans += x * yreturn ans


  

思路2代码实现: 
class Solution:def dividePlayers(self, skill: List[int]) -> int:# 计算所有技能值的总和s = sum(skill)# 计算团队数量(因为要两两分组,所以团队数量是技能值个数的一半)n = len(skill) // 2# 如果总和不能被团队数量整除,说明无法平均分配,返回 -1if s % n:return -1# 计算每个团队的理想技能值总和t = s // n# 初始化最终的化学效能总和为 0ans = 0# 使用 Counter 统计每个技能值出现的次数cnt = Counter(skill)# 遍历统计得到的技能值for k in list(cnt.keys()):# 如果当前技能值 k 与理想值 t - k 相等if k == t - k:# 如果该技能值的出现次数为奇数,无法两两配对,返回 -1if cnt[k] % 2:return -1# 计算该技能值两两配对产生的化学效能,并累加到总和中ans += k*k*cnt[k]//2else:# 如果当前技能值 k 和 t - k 的出现次数相等if cnt[k] == cnt[t - k]:# 计算它们配对产生的化学效能,并累加到总和中ans += k*(t - k)*cnt[k]# 将这两个技能值的出现次数置为 0,表示已经处理完cnt[k] = cnt[t - k] = 0else:# 如果出现次数不相等,无法满足两两配对的条件,返回 -1return -1# 返回最终的化学效能总和return ans


 

总结:

         两种方法,思路1较容易想出来但是复杂度略高。思路2相比于思路1可能没那么容易想出来,但是复杂度还是很优的。下面对思路2进行代码详解:

思路2代码详解:

        首先,通过计算技能值的总和以及团队数量,来判断是否能够平均分配技能值。如果不能整除,说明无法实现平均分组,直接返回 -1 。

        然后,创建一个计数器 cnt 来统计每个技能值出现的次数。

        接下来,遍历所有的技能值。对于每个技能值 k ,分两种情况处理:

  1. 如果 k 与理想差值 t - k 相等,需要检查其出现次数是否为偶数,因为只有偶数次才能两两配对。如果是偶数次,计算 k 两两配对产生的化学效能并累加到结果中。
  2. 如果 k 与理想差值 t - k 不相等,那么需要检查 k 和 t - k 的出现次数是否相等,如果相等则计算它们配对产生的化学效能,否则说明无法满足两两配对的条件,直接返回 -1 。

        最后,如果整个遍历过程都没有出现无法配对的情况,就返回计算得到的化学效能总和。

考点

  1. 数学计算,如求和、整除判断。
  2. 数据结构 Counter 的使用。
  3. 条件判断和逻辑处理。

收获

  1. 学习如何有效地处理整数列表的分组问题,包括总和计算、平均分配判断等。
  2. 掌握使用 Counter 来高效统计元素出现次数的方法。
  3. 提升通过遍历和条件判断来解决复杂逻辑问题的能力。
  4. 了解如何在代码中确保数据满足特定条件,不满足时进行错误处理返回特定值。

“无聊的并不是时间,而是平庸无奇的我。”——《樱花庄的宠物女孩》

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

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

相关文章

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(9)

Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go! (9&#x…

殷山:摩斯大模型隐私保护技术和应用探索

背景介绍 6月20日下午,“2024信通院数据智能大会”圆满落幕,摩斯技术负责人殷山在论坛上分享了摩斯在大模型隐私保护技术和行业应用的探索。 殷山发表“大模型隐私保护”主题演讲 摩斯技术负责人殷山在“数据智能安全主题论坛“上,带来“大…

NIVision-LabVIEW在灰度图上画圆

问题来源 在csdn上看到的这样一个问题,好像也没个正经答案,都用chatGPT回答,挺没劲的。不说提供个vi源代码,至少也来张截图嘛。我想着问题也不难,就自己动动手吧。 代码展示1 1、首先使用imaq ArrayToImage.vi创建了一…

java error ConcurrentModificationException 并发修改异常

ConcurrentModificationException 概述 这个异常在 Java 中通常发生在以下场景:当某个线程在遍历一个集合(如 ArrayList、HashMap 等)的过程中,另一个线程尝试修改这个集合的结构(如添加、删除元素)&#…

sheng的学习笔记-AI-学习向量量化

AI目录 sheng的学习笔记-AI目录-CSDN博客 需要学习前置知识:聚类,可参考 sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 什么是学习向量量化 “学习向量量化”(Learning Vector Quantization,简称LVQ)是试图找到一…

Qt | 子类化 QStyle(Qt自带图标大全)

01、简介 1、把绘制自定义部件外观的步骤大致分为三大板块,如下: ①、样式元素:即指定需要绘制的图形元素(比如焦点框、按钮,工具栏等)。样式元素使 用 QStyle 类中的一系列枚举(共有 11 个枚举)进行描述。 ②、样式选项:包含了需要绘制的图形元素的所有信息,比如包含…

Tomcat 下载部署到 idea

一、下载Tomcat Tomcat 是Apache 软件基金会(Apache Software Foundation)下的一个核心项目,免费开源、并支持Servlet 和JSP 规范。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发…

启动VMWare虚拟机报错

1. 无法打开内核设备“\\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。 解决办法: 解决办法: 将 Ubuntu 64 位.vmx 找到vmci0.present"TRUE"这行改成 vmci0.present "FAL…

wireshark工具获取设备IP地址

背景: 一个网口抓包工具,主要是升级XX设备时候不知道网口的ip地址。每次需要一个一个试,比较麻烦。 使用步骤: 1、连接好XX设备与笔记本,在网络连接里面找到以太网,没有出现红色X号,表示网线连…

文心一言 VS 讯飞星火 VS chatgpt (289)-- 算法导论21.3 2题

二、写出使用路径压缩的 FIND-SET 过程的非递归版本。如果要写代码,请用go语言。 文心一言: 在并查集(Union-Find)数据结构中,路径压缩(Path Compression)是一种优化技术,用于减少…

智能仓储:立体仓WCS设计

自动化立体仓库简称高架仓库,是采用高层货架存放货物,以巷道堆垛起重机为主,结合入库出库周边设备来进行作业的一种仓库。 立体仓主体由货架、巷道式堆垛机、输送机等组成。 电气控制系统、上位监控系统(Warehouse Control Syste…

【前后端实现】AHP权重计算

AHP权重计算: 需求:前端记录矩阵维度、上三角值,后端构建比较矩阵、计算权重值并将结果返回给前端 比较矩阵构建 如果你想要根据上三角(不包括对角线)的值来构建对称矩阵,那么你可以稍作修改上述的generate…

量化交易面临的难题

量化交易面临的难题 1、监管机构对于算法交易、量化交易的监管越来越严格3、回测场景于实盘交易场景的不匹配性4、策略并非100%有效,并非100%的收益5、股票、基本面、市场新闻之间的关系时刻在变化并且难以捉摸6、很难使用一套通用的交易规则去匹配所有的股票/市场/…

U盘数据恢复实战:两大方案助您找回珍贵数据

在数字化时代,U盘作为我们随身携带的数据存储工具,承载着无数重要的文件和信息。然而,由于误操作、系统崩溃或硬件故障等原因,U盘中的数据可能会突然消失,给我们带来极大的困扰。本文将深入探讨U盘数据恢复的概念、方法…

常见大功率蓝牙应用有哪些?

在无线通信技术飞速发展的今天,蓝牙技术以其低功耗和易用性优势成为短距离无线通信的佼佼者。然而,随着智能家居、工业4.0等新型应用的兴起,蓝牙应用设备对通信距离和稳定性的要求越来越高。为了满足更大范围的无线通信需求,大功率…

山寨币大额解锁抛压拖累比特币:10X Research 深度剖析市场动荡

加密货币市场大幅下跌,山寨币损失惨重 在经历了几个月的强劲表现后,加密货币市场最近经历了一轮大幅下跌,特别是山寨币损失惨重。10X Research 最近在其Newsletter中发表了观点,认为山寨币大额解锁所带来的抛压正在拖累比特币。本…

使用Birdeye访问Sui上加密市场数据

是一个链上加密交易数据聚合器,于2024年4月开始整合Sui数据。 个人DeFi用户可以在Birdeye的首页找到丰富的数据,包括关于主流区块链上的tokens、交易和交易者钱包的详细信息。 Birdeye提供API和WebSockets数据服务,涵盖token价格和其他DeFi…

聚星文社ai工具下载

您可以在聚星文社官方网站上下载他们的AI工具。请访问他们的官方网站, 然后找到下载页面,从中选择并下载所需的AI工具。下载 如果您对下载过程有任何问题,建议您直接联系聚星文社的客服人员寻求帮助。

计算机SCI期刊,中科院3区,1个月录用,易过审

一、期刊名称 Visual Computer 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:3.5 中科院分区:3区 三、期刊简介 视觉计算机发表有关捕获、识别、建模、分析和生成形状和图像的所有研究领域的文章。 计算机…

DDMA信号处理以及数据处理的流程---doa估计

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…