給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。
你找到的子陣列應是最短的,請輸出它的長度。
示例 1:
輸入: [2, 6, 4, 8, 10, 9, 15]
輸出: 5
解釋: 你只需要對 [6, 4, 8, 10, 9] 進行公升序排序,那麼整個表都會變為公升序排序。
說明 :
輸入的陣列長度範圍在 [1, 10,000]。
輸入的陣列可能包含重複元素 ,所以公升序的意思是<=。
o(n2)
classsolution
else
nums[j]=nums[j-1
]; }
}return
count;
}};
o(nlogn)
另乙個簡單的想法是:我們將陣列 numsnums 進行排序,記為 nums\_sortednums_sorted 。然後我們比較 numsnums 和 nums\_sortednums_sorted 的元素來決定最左邊和最右邊不匹配的元素。它們之間的子陣列就是要求的最短無序子陣列。
o(n)
這個演算法背後的思想是無序子陣列中最小元素的正確位置可以決定左邊界,最大元素的正確位置可以決定右邊界。
因此,首先我們需要找到原陣列在哪個位置開始不是公升序的。我們從頭開始遍歷陣列,一旦遇到降序的元素,我們記錄最小元素為 minmin 。
類似的,我們逆序掃瞄陣列 numsnums,當陣列出現公升序的時候,我們記錄最大元素為 maxmax。
然後,我們再次遍歷 numsnums 陣列並通過與其他元素進行比較,來找到 minmin 和 maxmax 在原陣列中的正確位置。我們只需要從頭開始找到第乙個大於 minmin 的元素,從尾開始找到第乙個小於 maxmax 的元素,它們之間就是最短無序子陣列。
classsolution
}for(int i=n-1;i>0;i--)
}for(int i=0;i)
}for(int j=n-1;j>0;j--)
}return jnum-inum+1>0?(jnum-inum+1):0
; }
};
最短無序連續子陣列
給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。方法一 排序演...
最短無序連續子陣列
題目描述 給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的。示例 1 輸入 2,6,4,8,10,9,15 輸出 5 解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變為公升序排序。說明 輸入...
最短無序連續子陣列
最短無序連續子陣列 給定乙個整數陣列,你需要尋找乙個連續的子陣列,如果對這個子陣列進行公升序排序,那麼整個陣列都會變為公升序排序。你找到的子陣列應是最短的,請輸出它的長度。示例 1 輸入 2,6,4,8,10,9,15 輸出 5解釋 你只需要對 6,4,8,10,9 進行公升序排序,那麼整個表都會變...