• leetcode 334 Increasing Triplet Subsequence


    题意:给一个序列nums,问是否存在一个至少长度为3的上升子序列,要求时间复杂度O(n),空间复杂度O(1)。

    解法:刷的第一道leetcode……medium……读题读错好多遍……真是……

    时间复杂度要求的很紧……一时间没想到好方法……于是看了题解orz

    大概思想就是用两个变量n1和n2,n1表示当前找到的上升子序列里最小的,n2表示找到的第2小的,当遍历到的这个数x比n1小就更新n1,否则如果比n2小就更新n2,否则就认为答案存在。

    一开始没太想明白……后来明白了……n2可以认为是当前存在的长度为2的上升子序列里结尾数字最小的序列的结尾数字,如果存在比它大的答案就成立,n1认为是当前所有数中最小的,如果出现介于n1和n2之间的数时更新了n2,所以我认为n1是作为更新n2的条件存在的,只有在更新n2之前有更小的数字才可以更新,否则就保留为原来的子序列……嗯……

    代码:

    class Solution {
    public:
        bool increasingTriplet(vector<int>& nums) {
            if(nums.size() < 3) return false;
            int minx1 = nums[0], minx2 = INT_MAX;
            for(int i = 1; i < nums.size(); i++) {
                if(nums[i] <= minx1) minx1 = nums[i];
                else if(nums[i] <= minx2) minx2 = nums[i];
                else return true;
            }
            return false;
        }
    };
    

      

  • 相关阅读:
    hiho150周
    hdu1011
    hiho1055/hdu1561
    bat脚本启动exe并打开文件后退出 + 中文乱码
    hiho1080
    hiho1079
    java异常处理——基础篇
    找不到要编译的文件——path环境变量配置
    MVC——studying
    轻松搞定EasyUI
  • 原文地址:https://www.cnblogs.com/Apro/p/5194976.html
Copyright © 2020-2023  润新知