《Cracking the Coding Interview程序员面试金典》----最小调整有序

xiaoxiao2021-02-27  302

时间限制:3秒  空间限制:32768K  热度指数:3080 本题知识点:  查找  排序  数组  算法知识视频讲解

题目描述

有一个整数数组,请编写一个函数,找出索引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程序员面试宝典

群) 欢迎你到来哦,看了博文给点脚印呗,谢谢啦~~

转载请注明原文地址: https://www.6miu.com/read-3263.html

最新回复(0)