最短無序連續子陣列

2021-10-02 21:00:23 字數 1130 閱讀 7593

題目描述:

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的。

示例 1:

輸入: [2, 6, 4, 8, 10, 9, 15]

輸出: 5

解釋: 你只需要對 [6, 4, 8, 10, 9] 進行公升序排序,那麼整個表都會變為公升序排序。

說明 :

輸入的陣列長度範圍在 [1, 10,000]。

輸入的陣列可能包含重複元素 ,所以公升序的意思是<=。

分析

同時從前往後和從後往前遍歷,分別得到排序陣列的右邊界和左邊界;

尋找右邊界:從前往後遍歷的過程中,用max記錄遍歷過的最大值,如果max大於當前的nums[i],說明nums[i]的位置不正確,應該屬於需要排序的陣列,因此將右邊界更新為i,然後更新max;這樣最終可以找到需要排序的陣列的右邊界,右邊界之後的元素都大於max;

尋找左邊界:從後往前遍歷的過程中,用min記錄遍歷過的最小值,如果min小於當前的nums[j],說明nums[j]的位置不正確,應該屬於需要排序的陣列,因此將左邊界更新為j,然後更新min;這樣最終可以找到需要排序的陣列的左邊界,左邊界之前的元素都小於min;

(從前往後遍歷和從後往前遍歷兩個過程可以分兩次迴圈完成,也可以放一起完成,這樣的話就有:j=len-i-1)

public

intfindunsortedsubarray

(int

nums)

int min=integer.max_value;

int max=integer.min_value;

int left=nums.length-1;

int right=0;

for(

int i=

0;i)else

}for

(int j=nums.length-

1;j>=

0;j--

)else

}return right>left?right-left+1:

0;}

最短無序連續子陣列

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。方法一 排序演...

最短無序連續子陣列

最短無序連續子陣列 給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。示例 1 輸入 2,6,4,8,10,9,15 輸出 5解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變...

最短無序連續子陣列

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。示例 1 輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。說明...