【LeetCode】Increasing Triplet Subsequence

来源:互联网 发布:软件系统分类 编辑:程序博客网 时间:2024/05/16 05:56

Given an unsorted array return whether an increasing subsequence of length 3 exists or not in the array.

Formally the function should:

Return true if there exists i, j, ksuch that arr[i] < arr[j] < arr[k] given 0 ≤ i < j < k ≤ n-1 else return false. 

Your algorithm should run in O(n) time complexity and O(1) space complexity.

Examples:
Given [1, 2, 3, 4, 5],
return true.

Given [5, 4, 3, 2, 1],
return false.

题目大意:给你一个数组,判断其中是否有三个递增的数,有的话返回True,没有的话返回False。
解析:本题中要求事件复杂度为O(n)且空间复杂度为O(1),所以用dp去解决不合题意,这个问题的本质就是找到三个增长的数,所以可以先在数组中找到两个递增的min1,min2(很容易实现,遍历的时候做一下判断就行了),然后遍历剩下的数的时候有三种情况:
(1)小于min1:把该数替换成min1
(2)min1和min2之间:把该数替换成min2
(3)大于min2:三个递增的数已经找到,返回True
代码:

class Solution {public: bool increasingTriplet(vector<int>& nums) {     if(nums.size()<3) return false;        int min1 = INT_MAX;        int min2 = INT_MAX;    for(int i =0;i<nums.size();i++){         if(nums[i]<=min1)         min1 = nums[i];         else if(nums[i]<=min2)              min2 = nums[i];         else              return true;        }        return false;    }};
0 0
原创粉丝点击