题解 | #需要排序的最短子数组长度#

需要排序的最短子数组长度

http://www.nowcoder.com/practice/fccb5d14b44b4b99b34839bdf20588e9

具体思路看注释

从左往右找最后一个不满足递增序列的位置

从右往左找最后一个不满足递增序列的位置

为什么不找第一个不满足递增序列的位置呢?

156378
从左往右第一个不满足递增位置的为3,但是明显需要排序的第一个位置为5
从右往左第一个不满足递增的位置为6,但是明显需要排序的第一个位置为3

从左往右最后一个不满足递增序列的位置为3
从右往左最后一个不满足递增序列的位置为5
因此最终返回的需要排序的最短子序列长度为3,5对应下标的差值+1

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n;
    while (cin >> n)
    {
        vector<int> arr(n, 0);
        for (int i = 0; i < n; i++)
        {
            cin >> arr[i];
        }
        //从左到右记录当前最大数字
        //并左往右找最后一个不满足递增序列的下标
        int max = arr[0];
        int flagj = 0;
        for (int j=1; j < n; j++)
        {
            if (arr[j] < max)
            {
                //记录当前不满足的下标值
                flagj=j;
            }
            else
            {
                //更新当前的最大值
                max = arr[j];
            }
        }
        //从右往左找最后一个不满足递增序列的下标
        int min = arr[n - 1];
        int flagi = 0;
        for ( int i = n - 2; i >= 0; i--)
        {
            if (arr[i] > min)
            {
                //记录当前的不满足的下标值
                flagi=i;
            }
            else
            {
                //更新当前的最小值
                min = arr[i];
            }
        }
        if (flagj >= flagi)
        {
            cout << flagj - flagi + 1 << endl;
        }
        else
        {
            cout << 0 << endl;
        }


    }
    return 0;
}
全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
11-11 14:21
西京学院 C++
无敌混子大王:首先一点,不管学校层次怎么样,教育经历放在第一页靠上位置,第一页看不到教育经历,hr基本直接扔掉了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务