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

怎么做网站dreamwave360收录提交

怎么做网站dreamwave,360收录提交,wordpress 百度统计,wordpress模板展示网站博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2491.划分技能点相等的团队【中等】 题目: 给你一个正整数数组…
  • 博客主页:誓则盟约
  • 系列专栏: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.dinnco.com/news/71253.html

相关文章:

  • 使用html5的网站近两年网络营销成功案例
  • 爱做片视频网站google store
  • 做电商网站的框架结构图百度在线翻译
  • 肥城网站开发公司百度app
  • 河北省住房和城乡建设厅 网站武汉seo优化公司
  • 惠州网站建设哪家便宜今日头条热搜榜
  • 做网站公司排行站长工具高清
  • 廊坊网站排名优化公司哪家好网络营销与直播电商好就业吗
  • 企业光纤局域网组网方案seo网络推广知识
  • wordpress如何添加自定义商品链接汉川seo推广
  • 采集类淘宝客网站怎么做icp备案查询官网
  • 国外专门用于做网站图片的成都seo整站
  • 沧州微酷网络科技有限公司百度优化教程
  • 定制型网站制作成人教育机构排行前十名
  • 网站logo如何做链接枣庄网站建设制作
  • 如何制作餐馆网站关键词优化搜索引擎
  • wordpress 站外链接腾讯广告联盟
  • 苏州网络公司有哪些成都sem优化
  • 公司网站必须做可信认证吗软文写手兼职
  • wordpress主题首页显示不全seo是哪里
  • 做网站的销售今日大新闻
  • 网站开发 语言济南seo全网营销
  • 可以做问卷的网站有哪些宁德seo优化
  • 可以做免费的网站吗万网域名注册官网阿里云
  • 做网站需学什么苏州seo关键词优化推广
  • 网站计费系统怎么做seo排名优化工具
  • 酒店网站建设系统介绍百度公司官方网站
  • 广州网站建设的地方推荐互联网广告公司
  • 哪个网站建站速度快自制网页
  • DW做的网站加载慢营销型网站制作建设