You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法排查LeetCode 334递增三元子序列解法问题,求解答

问题分析与解决方案

核心错误

你的代码逻辑存在根本性偏差:只检查了数组中连续的三个元素是否递增,但题目要求的是存在任意下标i<j<k(无需连续)满足nums[i]<nums[j]<nums[k]。

以测试用例nums=[20,100,10,12,5,13]为例,有效三元组是(2,3,5)(对应数值10<12<13),但这三个下标并不连续,所以你的代码无法检测到,最终错误返回false。

正确思路

我们可以通过维护两个变量first和second来高效解决这个问题:

  • first:记录遍历过程中遇到的最小数值
  • second:记录遍历过程中,比first大的最小数值
    遍历数组时:
  1. 如果当前元素小于等于first,更新first为当前元素
  2. 如果当前元素大于first但小于等于second,更新second为当前元素
  3. 如果当前元素大于second,说明找到了满足条件的三元组,直接返回true
    遍历结束后如果没找到,返回false

这种方法的时间复杂度是O(n),空间复杂度是O(1),能高效处理所有情况。

修正后的代码

class Solution {
    public boolean increasingTriplet(int[] nums) {
        if (nums.length < 3) {
            return false;
        }
        int first = Integer.MAX_VALUE;
        int second = Integer.MAX_VALUE;
        for (int num : nums) {
            if (num <= first) {
                first = num;
            } else if (num <= second) {
                second = num;
            } else {
                // 找到比second大的数,说明存在三元组
                return true;
            }
        }
        return false;
    }
}

验证测试用例

对于输入[20,100,10,12,5,13]:

  • 遍历到20:first更新为20
  • 遍历到100:100>20且100<=MAX_VALUE,second更新为100
  • 遍历到10:10<=20,first更新为10
  • 遍历到12:12>10且12<=100,second更新为12
  • 遍历到5:5<=10,first更新为5
  • 遍历到13:13>12,触发返回true

完全符合预期结果。

内容的提问来源于stack exchange,提问作者AJ008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:59:58