leetcode16.16. 最短需要排序的范围

58 阅读1分钟
public:
//双指针 观察元素是否需要参与排序
//从左侧开始寻找存在逆序对的最远数字即为右边界,因为该数字肯定需要参与排序
//从右侧开始寻找存在顺序对的最远数字即为左边界
    vector<int> subSort(vector<int>& array) {
        int max=INT_MIN;
        int min=INT_MAX;
        vector<int> res;
        int last=-1,first=-1;
        int len=array.size();
        if(len==0||len==1) {
            res.push_back(first);
            res.push_back(last);
            return res;
        }
        //找右侧//和左侧最大值相等的位置不能算,因此有判断条件有等号
        for(int i=0;i<len;++i){
            if(array[i]>=max) max=array[i];
            else last=i;
        }
        //找左侧
        for(int i=len-1;i>=0;--i){
            if(array[i]<=min) min=array[i];
            else first=i;
        }
        res.push_back(first);
        res.push_back(last);
        return res;


    }
};