遞增的三元子序列
阿新 • • 發佈:2018-07-16
試用 middle 是否 示例 給定 我們 存在 col 所有
給定一個未排序的數組,請判斷這個數組中是否存在長度為3的遞增的子序列。
正式的數學表達如下:
如果存在這樣的 i, j, k, 且滿足 0 ≤ i < j < k ≤ n-1,
使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否則返回 false 。
要求算法時間復雜度為O(n),空間復雜度為O(1) 。
示例:
輸入 [1, 2, 3, 4, 5]
,
輸出 true
.
輸入 [5, 4, 3, 2, 1]
,
輸出 false
.
致謝:
特別感謝 @DjangoUnchained 添加這道題並創建所有測試用例。
這條題一看就是用遍歷就TLE不給你過的。。。然而我用了3層遍歷之後竟然過了。。
下面是別人4ms的代碼,看完之後恍然大悟,只要在遍歷的時候不斷更新前兩個數的值,然後找到第三個數就行了。
第一次更新middle時,確定了一個遞增的二元子序列,之後更新middle,會不斷減小二元子序列的值,直到我們確定第三個數為止,以此遞推下去,可以確定遞增的n元子序列。
如果題目出的是什麽100元子序列讓我做,遍歷100層。。。想想都可怕。。。
bool increasingTriplet(int* nums, int numsSize) { int min = 2147483647; int middle = 2147483647; for(int i=0; i<numsSize; i++){if(nums[i]<=min){ min=nums[i]; } if(nums[i]>middle){ return true; } if(nums[i]<middle&&nums[i]>min){ middle=nums[i]; } } return false; }
遞增的三元子序列