山形三元组

可以先考虑两个数的情况,即找到一个数作为中间点,左边找到最小值,右边找到最小值,计算三个数的和。然后枚举中间点,计算所有可能的和中的最小值即可。

代码如下:

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),可以通过本题,但不是最优解。

相关推荐
夏天天天天天天天#4 分钟前
求Huffman树及其matlab程序详解
算法·matlab·图论
Infedium13 分钟前
优数:助力更高效的边缘计算
算法·业界资讯
student.J33 分钟前
傅里叶变换
python·算法·傅里叶
五味香39 分钟前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法
Beauty.56844 分钟前
P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
数据结构·c++·算法
Aurora20051 小时前
蓝桥杯2024省C
c语言·算法·蓝桥杯
爱棋笑谦1 小时前
二叉树计算
java·开发语言·数据结构·算法·华为od·面试
小鱼在乎1 小时前
动态规划---最长回文子序列
算法·动态规划
xiaobai12 31 小时前
二叉树的遍历【C++】
开发语言·c++·算法
吱吱鼠叔2 小时前
MATLAB数学规划:2.线性规划
算法·机器学习·matlab