【算法|贪心算法系列No.3】leetcode334. 递增的三元子序列

个人主页:兜里有颗棉花糖

欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创

收录于专栏【手撕算法系列专栏】【LeetCode

🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助

🍓希望我们一起努力、成长,共同进步

点击直接跳转到该题目

目录

1️⃣题目描述

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。

如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false

示例一:

输入:nums = [1,2,3,4,5]

输出:true

解释:任何 i < j < k 的三元组都满足题意

示例二:

输入:nums = [5,4,3,2,1]

输出:false

解释:不存在满足题意的三元组

示例三:

输入:nums = [2,1,5,0,4,6]

输出:true

解释:三元组 (3, 4, 5) 满足题意,因为 nums[3] == 0 < nums[4] == 4 < nums[5] == 6

注意:

  • 1 <= nums.length <= 5 * 105
  • -231 <= nums[i] <= 231 - 1

2️⃣题目解析

解题思路:

1.使用两个变量a和b来存储当前的最小值和次小值,初始时将a设置为数组中的第一个元素,将b设置为整型最大值。

2.遍历数组,对于每个元素nums[i],判断它是否大于b。如果是,说明找到了递增的三元组,直接返回true。

3.如果nums[i]不大于b,则判断是否大于a。如果是,更新b为nums[i],以保证b始终是当前的次小值。

4.如果nums[i]既不大于b,也不大于a,则将a更新为nums[i],以保证a始终是当前的最小值。

如果遍历完整个数组都没有找到递增的三元组,则返回false。

本题的贪心策略贪心的核心思想是尽量保持a和b的值最小,以便有更大的机会找到递增的三元组。

3️⃣解题代码

cpp 复制代码
class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        int a = nums[0];
        int b = INT_MAX;
        for(int i = 1;i < nums.size();i++)
        {
            if(nums[i] > b) return true;
            else if(nums[i] > a) b = nums[i];
            else a = nums[i];
        }
        return false;
    }
};
相关推荐
kfepiza10 小时前
CAS (Compare and Swap) 笔记251007
java·算法
墨染点香11 小时前
LeetCode 刷题【103. 二叉树的锯齿形层序遍历、104. 二叉树的最大深度、105. 从前序与中序遍历序列构造二叉树】
算法·leetcode·职场和发展
啊我不会诶11 小时前
23ICPC澳门站补题
算法·深度优先·图论
Brookty12 小时前
【算法】二分查找(一)朴素二分
java·学习·算法·leetcode·二分查找
黑色的山岗在沉睡13 小时前
LeetCode 2761. 和等于目标值的质数对
算法·leetcode·职场和发展
bawangtianzun13 小时前
重链剖分 学习记录
数据结构·c++·学习·算法
T1an-117 小时前
力扣70.爬楼梯
算法·leetcode·职场和发展
T1an-117 小时前
力扣169.多数元素
数据结构·算法·leetcode
_dindong1 天前
动规:回文串问题
笔记·学习·算法·leetcode·动态规划·力扣
wangwangmoon_light1 天前
0.0 编码基础模板
java·数据结构·算法