给定一个未排序的数组,请判断这个数组中是否存在长度为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添加这道题并创建所有测试用例。
我的思路:设立两个变量one和two,one表示此元素之前的最小值,而two表示其前面有比他小的最小值,即arr【j】的最小值,这样只要有比two大的就存在arr[i] < arr[j] < arr[k] ,返回true;one的目的是为了更新two;如果一个值比one大,却又比two小,则跟新two;这样做是因为one是最小值,所以跟新的two也是满足情况的最小取值;
代码实现:
今天和喜欢的人一起打游戏,嘻嘻,开心
咯咯咯
网友评论