可以先考虑两个数的情况,即找到一个数作为中间点,左边找到最小值,右边找到最小值,计算三个数的和。然后枚举中间点,计算所有可能的和中的最小值即可。
代码如下:
class Solution:
def minTotal(self, nums: List[int]) -> int:
n = len(nums)
res = float('inf')
for j in range(1, n - 1):
left_min, right_min = float('inf'), float('inf')
for i in range(j):
if nums[i] < nums[j]:
left_min = min(left_min, nums[i])
for k in range(j + 1, n):
if nums[k] < nums[j]:
right_min = min(right_min, nums[k])
if left_min != float('inf') and right_min != float('inf'):
res = min(res, left_min + nums[j] + right_min)
return res if res != float('inf') else -1
时间复杂度为O(n^3),可以通过本题,但不是最优解。