列表

详情


OR24. 最短排序

描述

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

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

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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2021-05-15

class ShortSubsequence {
public:
    int findShortest(vector<int> A, int n){
        vector<int> tmp(n);
        int l,r;
        for(int i = 0;i < n;i++)
        {
            tmp[i] = A[i];
        }
        sort(A.begin(),A.end());
        l = 0;
        while(l < n && tmp[l] == A[l])
           l++;
        r = n - 1;
        while(r > l && tmp[r] == A[r])
           r--;
        return r - l + 1;
    }
};

C++ 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-11-21

class ShortSubsequence {
public:
    int findShortest(vector<int> A, int n) {
        // write code here
        if(n<2)return 0;
        int maxLeft=A[0];
        int minRight=A[n-1];

        int start=0;
        int end=n-1;
        for(int i=1;i<n;i++){
            if(A[i]>=maxLeft){
                maxLeft=A[i];
            } else{
                start=i;
            }
        }

        for(int i=n-2;i>=0;i--){
            if(A[i]<=minRight){
                minRight=A[i];
            }else{
                end=i;
            }
        }
        return start>end?start-end+1:0;
    
    }
};

上一题