leetcode最短無序連續子陣列

毅毅毅毅毅發表於2021-08-03

 

 

平民解法:

既然是找最小陣列,那就得到一個排序好的陣列,然後直接和初試陣列比對,用一個left,right分別記錄從最初開始不同,到最後不同的小標,最後左右做差再加一,就能得到長度。

 

其他解法:

雙指標 + 線性掃描
另外一個做法是,我們把整個陣列分成三段處理。

起始時,先通過雙指標 ii 和 jj 找到左右兩次側滿足 單調遞增 的分割點。

即此時 [0, i][0,i] 和 [j, n)[j,n) 滿足升序要求,而中間部分 (i, j)(i,j) 不確保有序。

然後我們對中間部分 [i, j][i,j] 進行遍歷:

發現 nums[x] < nums[i - 1]nums[x]<nums[i−1]:由於對 [i, j][i,j] 部分進行排序後 nums[x]nums[x] 會出現在 nums[i - 1]nums[i−1] 後,將不滿足整體升序,此時我們需要調整分割點 ii 的位置;
發現 nums[x] > nums[j + 1]nums[x]>nums[j+1]:由於對 [i, j][i,j] 部分進行排序後 nums[x]nums[x] 會出現在 nums[j + 1]nums[j+1] 前,將不滿足整體升序,此時我們需要調整分割點 jj 的位置。


連結:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/solution/gong-shui-san-xie-yi-ti-shuang-jie-shuan-e1le/
來源:力扣(LeetCode)

相關文章