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; } };