Problem: 2908. 元素和最小的山形三元组 I
思路
记录下来每个位置左边的min和右边的min数组,即可以一次遍历得出结果。
『Step1』计算左前缀数组
『Step2』计算右前缀数组,转置
『Step3』遍历一遍nums,得到ans
结果
Code
class Solution:
def minimumSum(self, nums: List[int]) -> int:
left = [0,nums[0]]
_min = nums[0]
for idx in range(2,len(nums)-1):
left.append(min(_min,nums[idx-1]))
right = [nums[-1]]
_min = nums[-1]
for idx in range(len(nums)-3,0,-1):
right.append(min(_min,nums[idx+1]))
right.append(0)
right = right[::-1]
_min = 0xFFFFFFFF
for i in range(1,len(nums)-1):
if nums[i] > left[i] and nums[i] > right[i]:
_min = min(_min,nums[i]+left[i]+right[i])
return -1 if _min==0xFFFFFFFF else _min