演算法 面試題 16 16 部分排序

2021-10-17 04:16:16 字數 609 閱讀 8413

給定乙個整數陣列,編寫乙個函式,找出索引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...