最短排序

对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。

给定一个整数数组A及它的大小n,请返回最短子数组的长度。

测试样例:
[1,5,3,4,2,6,7],7
返回:4

class ShortSubsequence {
public:
    int findShortest(vector<int> v, int n) { 
        int R = 0; //定义 R 表示需要排序的最右边界
        int max = v[0]; //表示目前最大值
        for(int i = 0; i < n - 1; i++) {
            if(v[i] < max) R = i; //如果 i 位置上的数比目前最大值小,则将右边界指向 i
            else max = v[i]; //如果不小于,将 i 位置上的数赋给 max
        }

        int L = n - 1; //定义 L 表示最左边界
        int min = v[n - 1]; //表示目前最小值
        for(int i = n - 1; i >= 0; i--) {
            if(v[i] > min) L = i; //如果 i 位置上的数比目前最小值大, 则将左边界指向 i
            else min = v[i]; //如果不大于, 将 i 位置上的数赋给 min
        }

        if(R - L < 0) return 0; //如果范围为负,返回 0
        return R - L + 1;
    }
};
全部评论

相关推荐

程序员鼠鼠_春招版:都很烂大街,rpc也基本没人问,考研吧,不然就包装一段实习再去
点赞 评论 收藏
分享
01-26 22:20
已编辑
门头沟学院 Java
Java抽象带篮子:项目很nb了,现在好好准备八股和算法吧,早点找实习,可以看看我的置顶帖子。帖子里写了怎么改简历,怎么包装实习经历,还有2个高质量可速成的项目话术,和我的牛客八股笔记专栏
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务