LeetCode|3194. 最小元素和最大元素的最小平均值(day15)

99 阅读1分钟

作者:MJ昊

博客:掘金CSDN

公众号:程序猿的编程之路

今天是 昊 的算法之路第15天,今天分享的是LeetCode第3194题最小元素和最大元素的最小平均值的解题思路。这是一道简单难度的题目,考察排序与双指针的应用。

题目描述简要回顾

给定一个数组 nums,要求找出所有配对中最小元素与最大元素和的最小值,然后返回它的平均值。需要找到合理的元素配对,使最终的平均值最小。

解题思路

  • 排序:先将数组排序,保证最小元素和最大元素位于数组的两端。
  • 双指针:用两个指针分别指向数组的左右两端。每次计算左右指针元素之和,并更新最小值。
  • 收缩窗口:左指针右移,右指针左移,逐步缩小窗口。

代码实现:

var minimumAverage = function (nums) {
    let left = 0;
    let right = nums.length - 1;
    nums.sort((a, b) => a - b);// 将数组升序排序
    let min = Infinity;
    while (left <= right) {
        min = Math.min(min, nums[left] + nums[right]);// 更新最小和
        left++;
        right--;
    }

    return min / 2;// 返回最小和的一半,即平均值
};

复杂度分析

  • 时间复杂度O(n log n),主要是数组的排序开销。

  • 空间复杂度O(1),只使用了常量级别的额外空间。

总结

这道题通过排序和双指针的方法有效地解决了配对问题,找出了最小元素与最大元素和的最小平均值。这种思路在需要对数组元素两端进行配对的场景中非常常见,是一个经典的双指针算法题。