小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
解答思路
- 遍历所有可能的三元组:使用三重循环遍历数组中的所有可能的三元组。
- 检查和是否等于目标值:对于每个三元组,检查它们的和是否等于目标值
t。 - 计数满足条件的三元组:如果三元组的和等于目标值,则增加计数器
实现代码
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
解题思路
- 遍历数组:从数组的每个元素开始,尝试以该元素为区间的起始点。
- 计算区间和:对于每个起始点,计算从该点到数组末尾的每个可能的区间的和。
- 找到最小值:在每个区间内找到最小值。
- 计算乘积:计算区间和与区间最小值的乘积。
- 更新最大值:更新找到的最大乘积。
代码实现
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)