问题描述
给你
n个数,然后选择三个不同位置数相乘最大。
输入
第一行给一个
n
(
3
≤
≤
300
)
(3≤n≤300)。
第二行给
n个数
x
(
−
1000
≤
≤
1000
)
(−1000≤x≤1000)。
输出
输出三个数相乘最大值
样例
输入数据 1
5
1 2 3 -1 5
输出数据 1
30
提示
选择 2 3 5 ,乘起来为30最大
问题描述
给你
n个数,然后选择三个不同位置数相乘最大。
输入
第一行给一个
n
(
3
≤
≤
300
)
(3≤n≤300)。
第二行给
n个数
x
(
−
1000
≤
≤
1000
)
(−1000≤x≤1000)。
输出
输出三个数相乘最大值
样例
输入数据 1
5
1 2 3 -1 5
输出数据 1
30
提示
选择 2 3 5 ,乘起来为30最大
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言解答: 输入数据,首先得到n和n个数。 然后我们需要选择三个不同位置的数,使它们的乘积最大。 最简单的方式是考虑暴力枚举,但是这样时间复杂度是O(n^3),对于n=300的情况,显然会超时。 那么有没有更优秀的算法呢? 假设我们已经得到了n个数,那么我们如何选择3个数呢? 首先,我们将这些数从小到大排序,记为a[1],a[2],...,a[n]。 那么最大的乘积应该是哪三个数呢? 假设我们选择了a[i],a[j],a[k]作为这三个数,那么显然有i=a[j],a[k]>=a[i]。 因此,我们选择的三个数中,应该是a[1],a[2]和a[n],或者是a[n-2],a[n-1]和a[n]中的一个。 这是因为这些数之间的间隔最大,选出的三个数的乘积也会最大。 我们可以实现一个选择最大值的函数max3,如下所示: def max3(nums): nums.sort() return max(nums[0]*nums[1]*nums[-1], nums[-3]*nums[-2]*nums[-1]) 然后,在主函数中调用这个函数即可: n = int(input()) nums = list(map(int, input().split())) result = max3(nums) print(result) 代码如下: