코딩테스트

[릿코드/js] 다시풀기 334. Increasing Triplet Subsequence

_서리__ 2023. 9. 15. 11:13
var increasingTriplet = function(nums) {

    let len = nums.length;
    let i = 0;
    let j = 1;
    let k = 2;
    if (len < 3) return false;
    while (i < j && j < len - 1)
    {
        while (j < k && k < len)
        {
            while (k < len)
            {
                if (nums[i] < nums[j] && nums[j] < nums[k]) return true;
                k++;
            }
            j++;
            k = j + 1;
        }
        i++;
        j = i + 1;
        k = j + 1;
    }
    return false;
};

-> 처음 푼 풀이 3중 while문을 써서 O(n^3)의 시간복잡도로 풀었다.... 애초에 조건이 O(n)으로 풀라고 주어짐 당연히 테케 통과X...

 

var increasingTriplet = function(nums) {
    let firstNum = Infinity;
    let secondNum = Infinity;
    for (let current of nums)
    {
        if (current > firstNum && current > secondNum){
            return true;
        }
        if (firstNum < current)
        {
            secondNum = current;
        }
        else {
            firstNum = current;
        }
    }

    return false;
};

-> 타인의 풀이. 한번만 돌면서 세개의 값을 비교할 수 있다.

조건문에 의해 항상 firstnum < secondnum으로 유지됨. 이상태에서 현재 값이 secnondnum보다 크다면 true값 반환!