演算法題 重新排序的最短子陣列

2021-07-27 14:10:37 字數 1342 閱讀 4729

/*******************************

給定乙個無序陣列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大 的一系列情況 初始...