1、題目描述
給你乙個整數陣列 nums ,判斷這個陣列中是否存在長度為 3 的遞增子串行。
如果存在這樣的三元組下標 (i, j, k) 且滿足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否則,返回 false 。
高階:你能實現時間複雜度為 o(n) ,空間複雜度為 o(1) 的解決方案嗎?
2、示例
輸入:nums = [2,1,5,0,4,6]
輸出:true
解釋:三元組 (3, 4, 5) 滿足題意,因為 nums[3] == 0 < nums[4] == 4 < nums[5] == 6
3、題解
基本思想:單調棧,維護長度為3的遞增棧,如果當前元素比棧頂大,入棧;否則當前元素替換掉棧中剛好比它大的元素;這樣替換的好處是並不影響遞增子串行的長度。和300最長上公升子串行思想一致。
為什麼對於當前遍歷nums的元素需要用它覆蓋掉棧中比它大於或等於的元素中第乙個元素?
比如序列[2,4,5,3,7]當遍歷到3時,棧中陣列元素是[2,4,5],需要用3覆蓋掉4,這樣做的意義是遞增子串行長度為2的所有序列中,最後乙個元素最小可以是3替換掉之前最小可以是4的情況
#include#include#include#include#includeusing namespace std;
class solution ;
for(int i=1;ires.back())
res.push_back(nums[i]);
else if(nums[i]nums;
cout
}
遞增三元子串行LeetCode334
題目 給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子串行.數學表示式如下 如果存在這樣的 i,j,k,且滿足 0 i j k n 1,使得 arr i arr j arr k 返回 true 否則返回 false 說明 要求演算法的時間複雜度為 o n 空間複雜度為 o 1 分析 ...
Leetcode 334 遞增的三元子串行
給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子串行。數學表示式如下 如果存在這樣的 i,j,k,且滿足 0 ij k n 1,使得 arr i arr j arr k 返回 true 否則返回 false 說明 要求演算法的時間複雜度為 o n 空間複雜度為 o 1 示例 1 輸入...
LeetCode 334 遞增的三元子串行
給定乙個未排序的陣列,判斷這個陣列中是否存在長度為 3 的遞增子串行。數學表示式如下 如果存在這樣的 i,j,k,且滿足 0 i j k n 1,使得 arr i arr j arr k 返回 true 否則返回 false 說明 要求演算法的時間複雜度為 o n 空間複雜度為 o 1 示例 1 輸...