581. 最短无序连续子数组
生活随笔
收集整理的這篇文章主要介紹了
581. 最短无序连续子数组
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個整數數組 nums ,你需要找出一個 連續子數組 ,如果對這個子數組進行升序排序,那么整個數組都會變為升序排序。
請你找出符合題意的 最短 子數組,并輸出它的長度。
示例 1:
輸入:nums = [2,6,4,8,10,9,15]
輸出:5
解釋:你只需要對 [6, 4, 8, 10, 9] 進行升序排序,那么整個表都會變為升序排序。
示例 2:
輸入:nums = [1,2,3,4]
輸出:0
示例 3:
輸入:nums = [1]
輸出:0
解題思路
因為其中一個 連續子數組 ,如果對這個子數組進行升序排序,那么整個數組都會變為升序排序。
說明只有中間這個子數組是亂序的,前面一部分和后面一部分都是遞增的。因此我們可以維護一個從左到右的最大值和一個從右到左的最小值,最大值在前面和后面的遞增數組中,都是正常遞增的,但是在中間的亂序數組中,大值就會出現在小值的左邊,當出現這種情況時,就說明了當前元素是在亂序數組當中的,對于最小值也是同樣的道理
代碼
class Solution {public int findUnsortedSubarray(int[] nums) {int min=Integer.MAX_VALUE,max=Integer.MIN_VALUE;int n=nums.length; int l=-1,r=-1;for (int i=0;i<n;i++){if (max>nums[i]){r=i;}else {max=nums[i];}if (min<nums[n-i-1]){l=n-i-1;}else {min=nums[n-i-1];}}return r==-1?0:r-l+1;} }總結
以上是生活随笔為你收集整理的581. 最短无序连续子数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 连续几天梦到前妻怎么回事
- 下一篇: 802. 找到最终的安全状态