力扣解題思路 581 最短無序連續子陣列

2021-10-16 01:58:30 字數 758 閱讀 1305

思路:

這一題有點類似腦筋急轉彎,我最開始的思路是先將原陣列複製一遍排序,排序後從兩邊開始與原陣列對比,找到兩邊不一樣的數的索引,這段長度即為所求,但是這顯然有點刻意,而且時間複雜度也不低。那麼是否可以不排序直接找到兩邊的端點呢?

很簡單,如果最右端的一部分已經排好序,這部分的每個數都比它左邊的最大值要大,同理,如果最左端的一部分排好序,這每個數都比它右邊的最小值小。所以我們從左往右遍歷,如果i位置上的數比它左邊部分最大值小,則這個數肯定要排序, 就這樣找到右端不用排序的部分,同理找到左端不用排序的部分,它們之間就是需要排序的部分。

從左到右迴圈,記錄最大值為 max,若 nums[i] < max, 則表明位置 i 需要調整, 直到遍歷完所有數結束,記錄需要調整的最大位置 i 為 high;。

同理,從右到左迴圈,記錄最小值為 min, 若 nums[i] > min, 則表明位置 i 需要調整,直到遍歷完所有數結束,記錄需要調整的最小位置 i 為 low.

public

intfindunsortedsubarray

(int

nums)

for(

int i=n-

1;i>=0;

--i)

return r-l+

1<=0?

0:r-l+1;

}

581 最短無序連續子陣列

給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。複製陣列,對該陣列排序,然後和原陣列相比較,得到兩頭第乙個不一樣元素的位置,這個區間的長度即為返回值。這種方式的負責度是 o 排序的複雜度 o n ...

581 最短無序連續子陣列

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

581 最短無序連續子陣列

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