• [LeetCode]Increasing Triplet Subsequence


    题目:Increasing Triplet Subsequence

    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, k 
    such 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.

    题目:给定一个数组中找到是否有长度为3的递增序列,是返回true。

    注意:序列只需要递增不一定需要连续。

    也就是说只需要在下标递增的情况下,找到三个逐渐增大的数即可。

    思路:

    因为只需要找三个数,所以简单思考,只需要记住两个递增的数,然后遇到第三个数,该数大于这两个数就可以了。

    同时不忘了,当遇到较小的数的时候适当更新前两个数。那么什么时候更新前两个数呢?

    方便描述,我假设3个递增的数中最小的是smaller,中间的是larger,最大的是max。

    初始化,smaller=A[0],larger=INT_MAX;

    当遇到smaller< N <larger的数时,就要更新larger=N;

    当遇到N<smaller的数时,就要更新smaller=N;这样才能进一步更新larger,此时还没有更新larger,如果N不是有效的结果由于最终只比较larger来得出判断结果,所以也没有影响。

    当遇到N>larger时,就得出true的结果,直接返回。

    /*
    F(i)表示i处的升序的长度
    F(i) = max{nums[i] > nums[j] + F(j)}
    但是由于只需要判断长度为3的增序子序列,所以,只需要记录前面的最小值smaller,和增序长度为2的最小值larger就可以知道当前元素的增序子序列长度。
    当当前元素cur > larger时,长度变为3,即存在长度为3的增序子序列;
    当cur < larger时,又分为cur > smaller时,当前元素的长度是2,且更新larger;或cur < smaller时,当前元素长度为1,且更新smaller;
    */
    bool LeetCode::increasingTriplet(vector<int>& nums){
    	if (nums.size() < 3)return false;
    	//length记录增序子序列长度,smaller记录直到当前位置的最小值,larger记录length=1时的最小值
    	int length = 0, smaller = nums[0], larger = INT_MAX;
    	for (size_t i = 1; i < nums.size(); ++i){
    		if (nums[i] > larger)return true;//存在
    		else if (nums[i] < larger){
    			if (nums[i] > smaller){
    				larger = nums[i];//更新larger
    				length = 1;//长度为1
    			}
    			else smaller = nums[i];//更新smaller
    		}
    	}
    	return false;
    }
    

      

  • 相关阅读:
    Protocol Buffer详解
    RPC进阶篇
    RPC基础篇
    测试控制器
    更加简洁的tableview
    storyboard中Unwind segue使用
    IOS开发Apache服务器搭建
    IOS多线程操作
    IOS使用Svn的trunk、branches、tag分别的侧重
    在设计IOSapp时为了代码的扩展性可可维护性需要遵守的原则
  • 原文地址:https://www.cnblogs.com/yeqluofwupheng/p/7045160.html
Copyright © 2020-2023  润新知