一题目
给定一个int整数数组A及其大小n,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,即找出符合条件的最短序列。请返回一个二元组,元组的两个元素分别代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。要求A中元素均为正整数。
测试样例:
[1,4,6,5,9,10],6
返回:[2,3]
二题解
class Rearrange {
public:
vector<int> findSegment(vector<int> A, int n) {
// write code here
vector<int> B(A);使用A给新定义的vec赋初值
sort(B.begin(),B.end());
int start = 0,end = 0;
for(int i = 0;i < A.size();i++){//顺序遍历两个数组,找到第一个不同的数的索引
if(A[i] != B[i]){
start = i;
break;
}
}
for(int j = A.size() - 1;j >= start;j--){//逆序遍历两个数组,找到第一个不同的数的索引
if(A[j] != B[j]){
end = j;
break;
}
}
vector<int> res;
res.push_back(start);
res.push_back(end);
return res;
}
};