《Cracking the Coding Interview程式設計師面試金典》----最小調整有序

塵封的記憶0發表於2017-05-04
時間限制: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程式設計師面試寶典

群) 歡迎你到來哦,看了博文給點腳印唄,謝謝啦~~


相關文章