/*******************************給定乙個無序陣列nums,求出需要重新排序的最短子陣列
相似題:尋找陣列中元素nums[ii],使得nums[ii]大於左側所有的值,小於等於右側的值
***********************************/
/************************
思想:1.建立乙個乙個陣列right
2.後續遍歷陣列,right[i]儲存從ii+1~size-1最小值
3.從左向右遍歷,定義乙個leftmax, leftmax表示從0~ii-1最大值
4.定義標誌位陣列flag
如果leftmax<=nums[ii]<5.統計flag陣列中連續1的個數最短的長度即是所求值
時間複雜度
o(n)
空間複雜度
o(n)
****************************/
intshortestrearrangesubarray
(vector
<
int>
&nums
)int
*right
=new
int[
size
];int
*flag
=new
int[
size
];int
rightmin
=65535
;//從右向左遍歷,構造right陣列
for(
intii
=size-1
;ii>=0;
ii--)
}int
leftmax=-
65536
;//構造flag陣列 此處可以利用right陣列,降低空間複雜度
for(
intii=0
;ii<
size;ii
++)elseif(
leftmax
<
nums[ii
])}intminlen
=65535
;int
countlen=0
;//尋找最短序列
for(
intii=0
;ii<
size;ii
++)if
(minlen
>
countlen
)countlen=0
;}}delete
flag
;delete
right
;return
minlen
;}
最短排序子陣列
對於乙個陣列,請設計乙個高效演算法計算需要排序的最短子陣列的長度。給定乙個int陣列a和陣列的大小n,請返回乙個二元組,代表所求序列的長度。原序列位置從0開始標號,若原序列有序,返回0 保證a中元素均為正整數。測試樣例 1,4,6,5,9,10 6返回 2 分析 求出需要排序的最短子陣列的右界 設定...
演算法 需要排序的最短子陣列長度
給定乙個無序陣列,求出需要排序的最短子陣列的長度。例如 arr 返回4,因為只有 5,3,4,2 需要排序。解決這個問題可以在時間複雜度為o n 額外空間複雜度為o 1 完成。初始化變數nominindex 1,從右向左遍歷,便利的過程記錄右側出現過的數的最小值,記為min。假設當前數為arr i ...
需要排序的最短子陣列的長度
演算法描述 1.從左往右找 當前值比max小 的一系列情況 初始 max arr 0 如果當前元素比max大,max就等於當前元素 如果當前元素比max小,max不變,然後繼續往後找,直到最後一次出現 當前值比max小 的情形,記下此時的下標為k。2.從右往左找 當前值比min大 的一系列情況 初始...