LeetCode 2465. Number of Distinct Averages【哈希表,双指针,排序】简单

news/2024/10/23 9:03:00/

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。

为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库:https://github.com/memcpy0/LeetCode-Conquest。在这一仓库中,你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类题目归纳、通用解法总结等,还可以看到原题出现频率和相关企业等重要信息。如果有其他优选题解,还可以一同分享给他人。

由于本系列文章的内容随时可能发生更新变动,欢迎关注和收藏征服LeetCode系列文章目录一文以作备忘。

给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。

只要 nums 不是 空数组,你就重复执行以下步骤:

  • 找到 nums 中的最小值,并删除它。
  • 找到 nums 中的最大值,并删除它。
  • 计算删除两数的平均值。

两数 a 和 b 的 平均值 为 (a + b) / 2 。

  • 比方说,2 和 3 的平均值是 (2 + 3) / 2 = 2.5 。

返回上述过程能得到的 不同 平均值的数目。

注意 ,如果最小值或者最大值有重复元素,可以删除任意一个。

示例 1:

输入:nums = [4,1,4,0,3,5]
输出:2
解释:
1. 删除 05 ,平均值是 (0 + 5) / 2 = 2.5 ,现在 nums = [4,1,4,3]2. 删除 14 ,平均值是 (1 + 4) / 2 = 2.5 ,现在 nums = [4,3]3. 删除 34 ,平均值是 (3 + 4) / 2 = 3.52.52.53.5 之中总共有 2 个不同的数,我们返回 2

示例 2:

输入:nums = [1,100]
输出:1
解释:
删除 1100 后只有一个平均值,所以我们返回 1

提示:

  • 2 <= nums.length <= 100
  • nums.length 是偶数。
  • 0 <= nums[i] <= 100

解法 排序+哈希表

我们对数组 nums \textit{nums} nums 进行排序,随后使用两个指针,初始分别指向 nums \textit{nums} nums 首元素和尾元素对数组进行遍历,就可以不断得到当前数组的最大值和最小值。

由于 「不同平均值的数目」和「不同和的数目」是等价的,因此在计算时,可以直接求出两个指针指向元素的和,代替平均值,避免浮点运算。只需要使用一个哈希集合,将所有的和添加进去,随后哈希集合中的元素个数即为答案。

class Solution {
public:int distinctAverages(vector<int>& nums) {unordered_set<int> rec;sort(nums.begin(), nums.end());for (int i = 0, j = nums.size() - 1; i < j; ++i, --j) rec.insert(nums[i] + nums[j]);return rec.size();}
};

复杂度分析:

  • 时间复杂度: O ( n log ⁡ n ) O(n\log n) O(nlogn)
  • 空间复杂度: O ( n ) O(n) O(n)

http://www.ppmy.cn/news/223415.html

相关文章

LNMP服务搭建

这里写目录标题 什么是LNMP架构【安装 Nginx 服务】【安装 MySQL 服务】 什么是LNMP架构 LNMP代表的就是&#xff1a;Linux系统下NginxMySQLPHP这种网站服务器架构Linux是一类Unix计算机操作系统的统称&#xff0c;是目前最流行的免费操作系统。代表版本有&#xff1a;debian、…

Cherry STREAM KEYBOARD 剪刀脚键盘拆卸

Cherry STREAM KEYBOARD 剪刀脚键盘拆卸&#xff1a; 使用手指或者是牙签等细小物体从键帽的左下角或者右下角插入轻轻撬起&#xff08;慢&#xff09;&#xff0c;假如不好撬的话就多试一试四个角&#xff0c;一般是两个卡扣&#xff08;左下角右下角各一个&#xff09;&#…

计算机专业笔记本需要小键盘吗,笔记本小键盘数字键不能用 并点击解除锁定...

导语:提到小键盘,大多数人都知道,有朋友问联想笔记本电脑小键盘怎么打开,当然了,还有人问笔记本电脑右边数字键打不出数字,这到底怎么回事呢?其实笔记本电脑数字键盘打不出数字呢,下面小编就为大家说说笔记本小键盘数字键不能用,一起来了解吧。 笔记本小键盘数字键不能…

怎么在windows笔记本使用html,聊聊如何用笔记本电脑装逼

熟悉我的同学都知道&#xff0c;我是个土生土长的上海人。 在我高中那年&#xff0c;星巴克开始在上海普及&#xff0c;那时候这绝对是个“小资消费场所”&#xff0c;咖啡师们各个英文口语流利&#xff0c;表情自信、优雅&#xff0c;在你点单时还会装模作样地问一句&#xff…

小米笔记本bios版本大全_聊一款被“差别对待”的笔记本电脑

聊电脑这么多年,近两年里出现了一个过去不怎么见到的现象,那就是一大部分主流价位笔记本,都推出了搭载AMD处理器的“锐龙版”。 对于预算不足的用户来说,“锐龙版”保证了和“英特尔版”接近的性能,牺牲了一点续航能力,换取更低的预算,性价比更高。 大多数情况下,除了换…

ThinkPad键盘拆解与清理(附图详解)

ThinkPad键盘拆解与清理&#xff08;附图详解&#xff09; 在许多用户的眼里&#xff0c;键盘一直被视作非常精密的部件&#xff0c;因此当出现使用不当导致键盘松散&#xff0c;或者使用时间长了键盘底下有杂物要进行整理的时候&#xff0c;或者意外情况造成键盘松落(前几天…

华为matebook笔记本鸿蒙,聊聊鸿蒙对笔记本电脑行业的影响

原标题&#xff1a;聊聊鸿蒙对笔记本电脑行业的影响 最近这段时间&#xff0c;各大数码综合讨论区被一个词占据了&#xff0c;那就是华为新推出的操作系统——鸿蒙HarmonyOS。 鸿蒙具体是干什么的&#xff0c;它有什么用&#xff1f;推荐大家去百度搜索一下&#xff0c;华为官网…

键盘拆开重新安装步骤_键盘按键被拆了怎么办 电脑键盘怎么安装【详细介绍】...

键盘按键被拆了怎么办? 有时候小孩子玩电脑就喜欢东拆拆西拆拆&#xff0c;其中最容易受到伤害的就是键盘了&#xff0c;一不小心键盘按键就被拆了&#xff0c;被拆了不要紧&#xff0c;关键是要怎么安回去呢? 下面&#xff0c;我们就来看看电脑键盘安装教程。 1、首先要了解…