作者:MJ昊
公众号:程序猿的编程之路
今天是 昊 的算法之路第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),只使用了常量级别的额外空间。
总结
这道题通过排序和双指针的方法有效地解决了配对问题,找出了最小元素与最大元素和的最小平均值。这种思路在需要对数组元素两端进行配对的场景中非常常见,是一个经典的双指针算法题。