LeetCode解法汇总2465. 不同的平均值数目

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给你一个下标从 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. 删除 0 和 5 ,平均值是 (0 + 5) / 2 = 2.5 ,现在 nums = [4,1,4,3] 。
2. 删除 1 和 4 ,平均值是 (1 + 4) / 2 = 2.5 ,现在 nums = [4,3] 。
3. 删除 3 和 4 ,平均值是 (3 + 4) / 2 = 3.5 。
2.5 ,2.5 和 3.5 之中总共有 2 个不同的数,我们返回 2 。

示例 2:

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

提示:

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

解题思路:

/**

* 首先,对数组进行排序,则最大值最小值直接取最前面和最后面的即可;

* 其次,因为int不能表示小数点以后的值,所以除以2之后会导致数据不准,所以我们直接求和的不同可能性即可。

*/

代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include "Solution2465.h"

/**
 * 首先,对数组进行排序,则最大值最小值直接取最前面和最后面的即可;
 * 其次,因为int不能表示小数点以后的值,所以除以2之后会导致数据不准,所以我们直接求和的不同可能性即可。
 */
int Solution2465::distinctAverages(vector &nums)
{
    sort(nums.begin(), nums.end());
    int start = 0;
    int end = nums.size() - 1;
    set set;
    while (start < end)
    {
        set.insert(nums[start] + nums[end]);
        start++;
        end--;
    }

    return set.size();
};

你可能感兴趣的:(LeetCode编程题解法汇总,leetcode,算法,职场和发展)