美文网首页
581. Shortest Unsorted Continuou

581. Shortest Unsorted Continuou

作者: 龙之力量V | 来源:发表于2017-11-07 16:08 被阅读0次

    题目描述

    Given an integer array, you need to find onecontinuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too.

    You need to find theshortestsuch subarray and output its length.

    Example:

    Input: [2, 6, 4, 8, 10, 9, 15]
    Output: 5
    Explanation: You need to sort [6, 4, 8, 10, 9] in ascending order to make the whole array sorted in ascending order.
    

    Note:

    1.  Then length of the input array is in range [1, 10,000].
    2.  The input array may contain duplicates, so ascending order here means 
    

    分析

    本题是Leetcode一道简单难度的题目,考察数组的基本知识点。一般数组问题我们都可以想到先排序,排序之后会发现比较多的有趣的线索。

    本题要求找到能够排序之后使全局数组有序的子数组的长度,要求解子数组的长度,我们需要知道子数组的起点和终点的下标位置,那么问题就转变为如何求解子数组起点终点下标问题。

    我们使用我们前面分析的策略,先对我们的数组排个序,然后我们和原数组比较一下,看看有什么发现。我们发现,通过一个元素一个元素的逐一比较,我们很容易就找到两个数组中第一个不一样元素的位置和最后一个不一样元素的位置,这两个位置正是我们要求解的子数组的起点和终点,问题得到解决。

    同时不要忘记对边界条件的判断,如果起点和终点都相等的时候,那么意味着子数组并不存在。

    代码

    class Solution(object):
        def findUnsortedSubarray(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            '''
            [2, 6, 4, 8, 10, 9, 15]
            [2, 4, 6, 8, 9, 10, 15]
            start = 1
            end = 5
            '''
            if not nums:
                return 0
            
            sortedNums = sorted(nums)
            start = end = -1
            length = 0
            
            for i in range(len(nums)):
                if nums[i] != sortedNums[i]:
                    if start == -1:
                        start = i
                    end = i
            
            if start == end:
                length = 0
            else:
                length = end - start + 1
            
            return length
            
    
    代码截图

    视频教程

    中文讲解
    http://v.youku.com/v_show/id_XMzE0MDc0OTE4MA==.html?spm=a2hzp.8253869.0.0
    https://www.youtube.com/watch?v=go1q1R3QLc0&feature=youtu.be

    英文讲解
    http://v.youku.com/v_show/id_XMzE0MDgyMjY0NA==.html?spm=a2hzp.8253869.0.0
    https://www.youtube.com/watch?v=s191hahgPPo&feature=youtu.be

    推荐Channel

    Youtube Channel
    https://www.youtube.com/channel/UCgOBOym0p20QGvsccsWHc0A

    Youtube Channel

    Youku 频道
    http://i.youku.com/codingmonkey2017

    Youku 频道

    相关文章

      网友评论

          本文标题:581. Shortest Unsorted Continuou

          本文链接:https://www.haomeiwen.com/subject/fbdjmxtx.html