LeetCode581

題目:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/comments/

思路:

如果最右端的一部分已經排好序,這部分的每個數都比它左邊的最大值要大,同理;如果最左端的一部分排好序,這每個數都比它右邊的最小值小。

我們從左往右遍歷,如果當前位置上的數比它左邊部分最大值小,則這個數肯定要排序;從右往左遍歷,如果當前位置上的數比它右邊部分的最大值大,則這個數肯定要排序。

可以通過一次循環同時前後移動,合併成一次遍歷

<?php
$nums = [2, 3, 3, 2, 4];

function findUnsortedSubarray($nums) {
    $len = count($nums);
    $max = $nums[0];
    $min = $nums[$len - 1];
    for ($i = 0; $i < $len; $i++){
        $max = max($max, $nums[$i]);
        $min = min($min, $nums[$len - $i - 1]);
        if ($max != $nums[$i]){
            $right = $i;
        }
        if ($min != $nums[$len - $i - 1]){
            $left = $len - $i - 1;
        }
    }
    return $right - $left == 0 ? 0 : $right - $left + 1;
}

echo findUnsortedSubarray($nums);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章