LeetCode_491 递增子序列 /大厂笔试题讲解
Posted MR.SEEEKS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode_491 递增子序列 /大厂笔试题讲解相关的知识,希望对你有一定的参考价值。
一、题目信息
本题和LeetCode_491相同,这里我以牛客网的形式写题。
二、解题思路
题目要求的只需要找到长度为三的子序列,还不要求是连续的。创建两个引用,first,second,分别表示第一大和第二大的数字,如果遍历的时候数组中还有比他们两个数还大的数字,那长度为3的子序列不就有了吗?如果遍历完了还么有,就说明是真的没有了,返回false。
还有其他两种情况
1、遍历数组的时候遇到的数(这里称为P)first比p大,既然连子序列最小的数都比它大,那么就说明这时候的first不是最小的,更新first,让first=p。
2、P比fist大但是没有second大,大不是很大,但是也不小,这时我们更新
second,第二大的数就有了。
3、图和例子在下方。
假如下面有以下数组,8,25,13,11,30,数组名为arr。初始化fist为arr[0],second为Integer的最大值。如果还能有数字比second大,那直接返回好了。就是图的第三种情况。我们让i从1开始走一步过程。
1、i=1,arr[i]>first但是小于second更新second,second=arr[i],为25.
2、i=2,arr[i]>first但是小于second,更新second,second=13.
3、i=3,arr[i]>first但是小于second,更新second,second=11.
4、i=4,arr[i]>first,还大于second,找到了!
三、解题代码
由JAVA实现
class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int []arr=new int[n];
for (int i = 0; i <n ; i++) {
arr[i]=scanner.nextInt();
}
int first=arr[0];
int second=Integer.MAX_VALUE;
for (int i = 1; i <n ; i++) {
if(arr[i]<first){
first=arr[i];
}
else if(arr[i]>first && arr[i]<second){
second=arr[i];
}
else if(arr[i]>first && arr[i]>second){
System.out.println("true");
return;
}
}
System.out.println("false");
}
}
四、其他好题分享
k个一组翻转链表 哔哩哔哩2020校园招聘笔试题/LeetCode_25(困难)讲解
怎么把i am a student逆置成student a am i?面试题逆置字符串讲解
什么?动态规划10行求出连续子数组的最大和 剑指offer-42讲解
剑指 Offer 39. 数组中出现次数超过一半的数字 简单易懂14行搞定 。人人皆可会
LeetCode 24:两两交换链表中的节点,1662. 检查两个字符串数组是否相等
剑指 Offer 58 - II. 左旋转字符串的三种解法一起看看吧!!
字符串“aabcccccaaa”压缩成“a2b1c5a3“还要返回更小的?力扣面试题 01.06. 字符串压缩讲解
找到不重复的数字进阶版 空间复杂度O(1),时间O(n)平方,不能修改数组内容。不能对数组进行排序
LeetCode_231. 判断一个数是否为2 的幂,与运算一行代码解决
以上是关于LeetCode_491 递增子序列 /大厂笔试题讲解的主要内容,如果未能解决你的问题,请参考以下文章