• 力扣100114. 元素和最小的山形三元组 II(中等)


    题目描述:

    给你一个下标从 0 开始的整数数组 nums 。

    如果下标三元组 (i, j, k) 满足下述全部条件,则认为它是一个 山形三元组 :

    • i < j < k
    • nums[i] < nums[j] 且 nums[k] < nums[j]

    请你找出 nums 中 元素和最小 的山形三元组,并返回其 元素和 。如果不存在满足条件的三元组,返回 -1 。

    示例 1:

    输入:nums = [8,6,1,5,3]
    输出:9
    解释:三元组 (2, 3, 4) 是一个元素和等于 9 的山形三元组,因为: 
    - 2 < 3 < 4
    - nums[2] < nums[3] 且 nums[4] < nums[3]
    这个三元组的元素和等于 nums[2] + nums[3] + nums[4] = 9 。可以证明不存在元素和小于 9 的山形三元组。
    

    示例 2:

    输入:nums = [5,4,8,7,10,2]
    输出:13
    解释:三元组 (1, 3, 5) 是一个元素和等于 13 的山形三元组,因为: 
    - 1 < 3 < 5 
    - nums[1] < nums[3] 且 nums[5] < nums[3]
    这个三元组的元素和等于 nums[1] + nums[3] + nums[5] = 13 。可以证明不存在元素和小于 13 的山形三元组。
    

    示例 3:

    输入:nums = [6,5,4,3,4,5]
    输出:-1
    解释:可以证明 nums 中不存在山形三元组。
    

    提示:

    • 3 <= nums.length <= 105
    • 1 <= nums[i] <= 108

    思路:

    题目的意思是求元素和最小 的山形三元组,而且这三个数满足:

    • i < j < k
    • nums[i] < nums[j] 且 nums[k] < nums[j]

     也就是说中间那个数大于左右两边就行。

    k的范围是1-nums.size()-2,我们遍历数组下标为1-nums.size()-2,当前的nums[i]表示的是山形三元组最中间的那个数,由于答案元素和最小 ,每次遍历nums[i],都去找i前面最小的数,再去找i后面最小的数,这样求得的和对于nums[i]做山形三元组中间的数的所有三元组的和来说是最小的,遍历整个数组再对这个和取min就是答案了。

    为什么这样求得的ans会是所有山形三元组的和的最小值呢?假设a[i]表示下标为i的元素作为山形三元组中间元素的最小和,a[i]=nums[i]+左边最小的数+右边最小的数,ans=min(a[i],ans).

    所以ans是所有可能答案中的最小值。

    代码:

    1. class Solution {
    2. public:
    3. int minimumSum(vector<int>& nums) {
    4. int len=nums.size();
    5. int lmi=nums[0];//左边最小的值
    6. vector<int> s(len+10);
    7. s[len-1]=nums[len-1];
    8. for(int i=len-2;i>=0;i--){
    9. s[i]=min(nums[i],s[i+1]);
    10. }//s[i]表示的是i-len-1的最小值
    11. int ans=1e9;
    12. for(int i=1;i-1;i++){
    13. if(nums[i]>lmi&&nums[i]>s[i+1]){
    14. ans=min(ans,nums[i]+lmi+s[i+1]);
    15. }
    16. lmi=min(lmi,nums[i]);//更新左边最小值
    17. }
    18. if(ans==1e9)return -1;//如果ans没有更新,说明不存在三元组
    19. return ans;
    20. }
    21. };

  • 相关阅读:
    骑行运动耳机哪个好,列举几款与运动最符合的耳机清单
    非递归方式实现二叉树四种遍历
    【2024系统架构设计】 系统架构设计师第二版-未来信息综合技术
    多路转接(使用poll实现)
    R语言聚类分析
    24深圳杯数学建模挑战赛A题6页初步思路+参考论文+保姆级答疑!!!
    领跑两轮电动车江湖,谁是“关键先生”?
    springboot2.x+security+vue2.x后台管理框架---菜单管理(五)
    MQ写满的情况如何处理?
    浅谈——网络安全架构设计(三)
  • 原文地址:https://blog.csdn.net/qq_62987647/article/details/133978752