题目
你有一个初始为空的浮点数数组 averages。另给你一个包含 n 个整数的数组 nums,其中 n 为偶数。
你需要重复以下步骤 n / 2 次:
从 nums 中移除 最小 的元素 minElement 和 最大 的元素 maxElement。
将 (minElement + maxElement) / 2 加入到 averages 中。
返回 averages 中的 最小元素。
示例 1:
输入:
nums = [7,8,3,4,15,13,4,1]
输出:
5.5
解释:
步骤 | nums | averages |
---|---|---|
0 | [7,8,3,4,15,13,4,1] | [] |
1 | [2,3,7,8] | [5] |
2 | [3,7] | [5,5] |
3 | [] | [5,5,5] |
提示:
2 <= n == nums.length <= 50
n 为偶数。
1 <= nums[i] <= 50
答案
我的方法一:
第一次采用的是for循环,这个题很简单,非常容易就能做出来,但是为什么我用了两个办法的,因为第一次提交的代码用时比较高,排名靠后,于是就想能不能用更快更高效的方法试一试,因此今天是两套方法。
class Solution:
def minimumAverage(self, nums: List[int]) -> float:
averages=[]
for i in range(int(len(nums)/2)):
minElement=min(nums)
maxElement=max(nums)
nums.remove(minElement)
nums.remove(maxElement)
averages.append((maxElement+minElement)/2)
return min(averages)
我的方法二:
第二个采用的是while循环,不过我是现将它进行了排序,这样我认为会更快一点,事实结果也是如此。
class Solution:
def minimumAverage(self, nums: List[int]) -> float:
averages=[]
nums.sort()
n=len(nums)
i=0
while True:
averages.append((nums[i]+nums[n-i-1])/2)
if i==n-i-2:
return min(averages)
i+=1
官方的方法:排序
首先将 nums 从小到大进行排序,然后枚举 i∈[0, n/2),取
(nums[i]+nums[n−1−i])/2的最小值。
class Solution:
def minimumAverage(self, nums: List[int]) -> float:
nums.sort()
res, n = inf, len(nums)
for i in range(n // 2):
res = min(res, (nums[i] + nums[n - 1 - i]) / 2)
return res
作者:力扣官方题解
链接在这里
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。