有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。
给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。保证A中元素均为正整数。
测试样例: [1,4,6,5,9,10],6返回:[2,3]
思路:对数组排序后比较第一个数不同和最后一个数不同,对应的索引就是m, n
代码如下:
class Rearrange { public: vector<int> findSegment(vector<int> A, int n) { vector<int> vec(A); sort(vec.begin(), vec.end()); int start = 0, end = 0; bool turn = false, first = true; for (int i = 0; i < A.size(); ++i) { if (A[i] != vec[i]) { start = i; break; } } for (int i = A.size() - 1; i >= 0; --i) { if (A[i] != vec[i]) { end = i; break; } } vector<int> result; result.push_back(start); result.push_back(end); return result; } };
不懂的可以加我的QQ群:261035036(IT程序员面试宝典
群) 欢迎你的到来哦,看了博文给点脚印呗,谢谢啦~~