給定乙個整數陣列,編寫乙個函式,找出索引m和n,只要將索引區間[m,n]的元素排好序,整個陣列就是有序的。注意:n-m盡量最小,也就是說,找出符合條件的最短序列。函式返回值為[m,n],若不存在這樣的m和n(例如整個陣列是有序的),請返回[-1,-1]。
示例:0 <= len(array) <= 1000000
【解法】如果存在這樣的m和n,則陣列可看成三部分,m左側的有序部分、n右側的有序部分和m n之間的待排序部分。乙個巧妙的方法雙指標遍歷o(n)複雜度即可完成。
class
solution
;int m=array.length-
1,n=0;
int max=array[0]
,min=array[array.length-1]
;for
(int i=
1;i)for
(int i=array.length-
2;i>=
0;i--
)//已經是有序陣列了
if(m>n)
return
newint
;return
newint
;}}
面試題 16 16 部分排序
給定乙個整數陣列,編寫乙個函式,找出索引m和n,只要將索引區間 m,n 的元素排好序,整個陣列就是有序的。注意 n m盡量最小,也就是說,找出符合條件的最短序列。函式返回值為 m,n 若不存在這樣的m和n 例如整個陣列是有序的 請返回 1,1 class solution int left 0,le...
陣列 面試題 16 16 部分排序
題目 解答 預設公升序 降序也只是改一點 不影響 原理 如果左側最大值大於中間的最小值,則一定會被中間序列包括 同理,如果右側最小值大於中間的最大值,則一定會被中間序列包括。一遍遍歷 兩個指標 兩次掃瞄可一次遍歷完成 1 從前向後掃瞄陣列,判斷當前array i 是否比max小,是則將last置為當...
部分排序演算法的實現
講述部分排序演算法的實現與利弊 我認為你們掌握氣泡排序,歸併排序,快速排序這三種足以 概念 在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較後發現他們的排序與排序要求相反時,就將他們互換。實現 inclu...