feat(581-shortest-unsorted-continuous-subarray): add py3 solution
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
class Solution:
|
||||
def findUnsortedSubarray(self, nums: List[int]) -> int:
|
||||
min_unsorted = float("inf")
|
||||
max_unsorted = float("-inf")
|
||||
|
||||
# Find min and max element in the unsorted portion
|
||||
for i, num in enumerate(nums):
|
||||
if not self.is_sorted(i, nums):
|
||||
min_unsorted = min(min_unsorted, num)
|
||||
max_unsorted = max(max_unsorted, num)
|
||||
|
||||
if min_unsorted == float("inf"):
|
||||
return 0
|
||||
|
||||
# Find right places for min and max elements from previous
|
||||
# step in the "sorted" section of the array
|
||||
left = 0
|
||||
while nums[left] <= min_unsorted:
|
||||
left += 1
|
||||
|
||||
right = len(nums) - 1
|
||||
while nums[right] >= max_unsorted:
|
||||
right -= 1
|
||||
|
||||
return right - left + 1
|
||||
|
||||
def is_sorted(self, i: int, nums: List[int]) -> bool:
|
||||
n = len(nums)
|
||||
|
||||
if n <= 1:
|
||||
return True
|
||||
|
||||
if i == 0:
|
||||
return nums[i] <= nums[i + 1]
|
||||
|
||||
if i == n - 1:
|
||||
return nums[i - 1] <= nums[i]
|
||||
|
||||
return nums[i - 1] <= nums[i] <= nums[i + 1]
|
||||
Reference in New Issue
Block a user