Min Range Needed to Sort
列表待排序范围
问题描述
给定一个由整数组成的列表,返回列表中需要排序(从小到大)的最小子列表的索引范围。
测试样例
# Input:
[1, 7, 9, 5, 7, 8, 10]
# Output:
(1, 5)
# 需要排序的子列表为[7, 9, 5, 7, 8]
# 因此输出其在列表中的索引位置 (1,5)
内容首发于微信公众号IT信息教室,如果您想学习更多AI相关的技能,欢迎搜索关注或微信扫描下方二维码关注~~
参考代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Node class
class Solution:
# O(n) time, O(1) space.
def findRange(self, nums):
left = 0
right = 0
maxNum = -float('inf')
minNum = float('inf')
# 先从左向右找到右边界
# 将当前值与当前最大值比较,如果小于最大值,则需要排序,更新右侧边界到当前位置
for idx in range(len(nums)):
if nums[idx] < maxNum:
right = idx
maxNum = max(nums[idx], maxNum)
# 再从右向左找到左边界
# 将当前值与当前最小值比较,如果小于最小值,则需要排序,更新左侧边界到当前位置
for idx in range(len(nums)-1, -1, -1):
if nums[idx] > minNum:
left = idx
minNum = min(minNum, nums[idx])
return (left, right)
# Test Program
nums = [1, 7, 9, 5, 7, 8, 10]
result = Solution().findRange(nums)
print(result)
# (1, 5)