給定一個(gè)整數(shù)數(shù)組,你需要尋找一個(gè)連續(xù)的子數(shù)組,如果對(duì)這個(gè)子數(shù)組進(jìn)行升序排序,那么整個(gè)數(shù)組都會(huì)變?yōu)樯蚺判颉?/p>
你找到的子數(shù)組應(yīng)是最短的,請(qǐng)輸出它的長(zhǎng)度。
示例 1:
輸入: [2, 6, 4, 8, 10, 9, 15]
輸出: 5
解釋: 你只需要對(duì) [6, 4, 8, 10, 9] 進(jìn)行升序排序,那么整個(gè)表都會(huì)變?yōu)樯蚺判颉?/p>
說(shuō)明 :
輸入的數(shù)組長(zhǎng)度范圍在?[1, 10,000]。
輸入的數(shù)組可能包含重復(fù)元素?,所以升序的意思是<=。
思路1:
排序的思想,和排好序的數(shù)組對(duì)比:
取出第一個(gè)的最小下標(biāo)和最后一個(gè)的最大下標(biāo),相差加1即是最短無(wú)序子數(shù)組長(zhǎng)度
官方的解釋是:另一個(gè)簡(jiǎn)單的想法是:我們將數(shù)組 numsnums 進(jìn)行排序,記為 nums\_sortednums_sorted 。然后我們比較 numsnums 和 nums\_sortednums_sorted 的元素來(lái)決定最左邊和最右邊不匹配的元素。它們之間的子數(shù)組就是要求的最短無(wú)序子數(shù)組。
代碼如下:
nums1=[]
????????for?i?in?range(len(nums)):
????????????nums1.append(nums[i])
????????nums.sort()
????????start=len(nums)
????????end=0
????????for?i?in?range(len(nums)):
????????????if?nums[i]!=nums1[i]:
????????????????start?=?min(start,?i)
????????????????end?=?max(end,?i)
????????if?end?-?start?>=?0:
????????????ans=end?-?start+1
????????else:
????????????ans=0
????????return?ans