AI 刷题-最大区间乘积问题 | 豆包MarsCode AI刷题

68 阅读3分钟

小U有一个整数数组 arr,他希望找到其中三个元素 i,j,k满足条件i<j<k且 arr[i]+ arr[j]+ arr[k]== target。由于可能存在大量的元组,结果需要对 10^9 +7取模。

例如:当 arr =[1,1,2,2,3,3,4,4,5,5]且t=8时,有多个元组满足条件,你需要返回这些元组的数量。

测试样例

样例1:

输入:arr=[1,1,2,2,3,3,4,4,5,5],t=8

输出:20

样例2:

输入:arr =[2,2,2,2],t=6

输出:4

样例3:

输入:arr =[1,2,3,4,5],t=9

输出:2

样例4:

输入:arr=[1,1,1,1],t=3

输出:4

解答思路
  1. 遍历所有可能的三元组:使用三重循环遍历数组中的所有可能的三元组。
  2. 检查和是否等于目标值:对于每个三元组,检查它们的和是否等于目标值 t
  3. 计数满足条件的三元组:如果三元组的和等于目标值,则增加计数器
实现代码
def solution(arr: list, t: int) -> int:
    count = 0
    n = len(arr)
    # 遍历所有可能的三元组
    for i in range(n):
        for j in range(i + 1, n):
            for k in range(j + 1, n):
                if arr[i] + arr[j] + arr[k] == t:
                    count += 1
    return count

if __name__ == '__main__':
    print(solution([1, 1, 2, 2, 3, 3, 4, 4, 5, 5], 8) == 20)
    print(solution([2, 2, 2, 2], 6) == 4)
    print(solution([1, 2, 3, 4, 5], 9) == 2)
    print(solution([1, 1, 1, 1], 3) == 4)

小R正在处理一个数组序列,他的任务是找出一个区间,使得这个区间的所有数经过以下计算得到的值是最大的:

区间中的最小数*区间所有数的和

小R想知道,经过计算后,哪个区间能产生最大的值。你的任务是帮助小R编写一个程序,输出最大计算值。

例如:给定数组序列[6,2,1],可以得到以下区间及其计算值:

[6]=6*6=36

[2]=2*2=4

。[1]=1*1=1

。[6,2]=2*8=16

。[2,1]=1*3=3

。[6,2,1]=1*9=9

根据这些计算,小R可以选定区间[6],因此输出的最大值为 36。

测试样例

样例1:

输入:n=3,a=[6,2,1]

输出:36

解题思路
  1. 遍历数组:从数组的每个元素开始,尝试以该元素为区间的起始点。
  2. 计算区间和:对于每个起始点,计算从该点到数组末尾的每个可能的区间的和。
  3. 找到最小值:在每个区间内找到最小值。
  4. 计算乘积:计算区间和与区间最小值的乘积。
  5. 更新最大值:更新找到的最大乘积。

代码实现

def solution(n: int, a: list) -> int:
    max_product = 0
    for i in range(n):
        current_sum = 0
        min_value = float('inf')
        for j in range(i, n):
            current_sum += a[j]
            min_value = min(min_value, a[j])
            product = current_sum * min_value
            max_product = max(max_product, product)
    return max_product

if __name__ == '__main__':
    print(solution(n = 3, a = [6, 2, 1]) == 36)
    print(solution(n = 4, a = [5, 1, 4, 3]) == 25)
    print(solution(n = 5, a = [7, 3, 2, 1, 8]) == 64)