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(困难)讲解

一年中的第几天 哔哩哔哩2020校园招聘笔试题讲解

复数乘法 哔哩哔哩2020校园招聘面试题详解

剑指 Offer 67. 把字符串转换成整数

怎么把i am a student逆置成student a am i?面试题逆置字符串讲解

三种方法任君挑选 LeetCode_136只出现一次的数字

什么?动态规划10行求出连续子数组的最大和 剑指offer-42讲解

剑指 Offer 39. 数组中出现次数超过一半的数字 简单易懂14行搞定 。人人皆可会

二叉树的层序遍历原理+LeetCode真题练习

LeetCode 24:两两交换链表中的节点,1662. 检查两个字符串数组是否相等

LeetCode 21. 合并两个有序链表

剑指 Offer 58 - II. 左旋转字符串的三种解法一起看看吧!!

字符串“aabcccccaaa”压缩成“a2b1c5a3“还要返回更小的?力扣面试题 01.06. 字符串压缩讲解

字符串bit666keji123“中数字的个数?

找到不重复的数字进阶版 空间复杂度O(1),时间O(n)平方,不能修改数组内容。不能对数组进行排序

LeetCode_231. 判断一个数是否为2 的幂,与运算一行代码解决

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和

剑指 Offer II 010. 和为 k 的子数组 前缀和+哈希表优化讲解

以上是关于LeetCode_491 递增子序列 /大厂笔试题讲解的主要内容,如果未能解决你的问题,请参考以下文章

笔试题1:最长严格递增子序列

完美世界笔试题-递增子序列B-最长递增子序列打印

笔试题学习(dp,重叠子问题,卡特兰数,手电过桥,最长公共子序列)

LeetCode 0491. 递增子序列

回溯——491.递增子序列

491 Increasing Subsequences 递增子序列