演算法 需要排序的最短子陣列長度

2022-08-22 07:57:10 字數 859 閱讀 9638

給定乙個無序陣列,求出需要排序的最短子陣列的長度。

例如:arr=返回4,因為只有[5,3,4,2]需要排序。

解決這個問題可以在時間複雜度為o(n)、額外空間複雜度為o(1)完成。

初始化變數nominindex=-1,從右向左遍歷,便利的過程記錄右側出現過的數的最小值,記為min。假設當前數為arr[i],如果

arr[i]>min,說明如果要整體有序,min值必然會移到arr[i]的左邊。用nominindex記錄最左邊出現這種情況的位置。如果遍歷完成後,

nominindex的值依然為-1,說明從右向左始終不公升序,原陣列本來就有序,直接返回0,即完全不需要排序。

接下來從左向右遍歷,遍歷的過程記錄左側出現過的數的最大值。記為max。假設當前數為arr[i],如果arr[i]

遍歷完後,arr[nominindex…nomaxindex]是真正需要排序的部分。返回它的長度即可。

public

static

int getminlength(int

arr)

int min = arr[arr.length - 1];

int nominindex = -1;

for (int i = arr.length - 2; i != -1; i--)

else

}if (nominindex == -1)

int max = arr[0];

int nomaxindex = -1;

for (int i = 1; i != arr.length; i++)

else

}return nomaxindex - nominindex + 1;

}

2 1 需排序的最短子陣列長度

題目描述 對於乙個無序陣列a,請設計乙個演算法,求出需要排序的最短子陣列的長度。給定乙個整數陣列a及它的大小n,請返回最短子陣列的長度。測試樣例 1,5,3,4,2,6,7 7 返回 4 1 2 這個題在牛客網上的講解我感覺是有點問題的,3因為預設了公升序排序!4如下實現對陣列 8,7,6,5,4,...

需要排序的最短子陣列的長度

演算法描述 1.從左往右找 當前值比max小 的一系列情況 初始 max arr 0 如果當前元素比max大,max就等於當前元素 如果當前元素比max小,max不變,然後繼續往後找,直到最後一次出現 當前值比max小 的情形,記下此時的下標為k。2.從右往左找 當前值比min大 的一系列情況 初始...

待排序的最短子陣列長度 C 版

題目 對於乙個陣列,請設計乙個高效演算法計算需要排序的最短子陣列的長度。給定乙個int陣列a和陣列的大小n,請返回乙個二元組,代表所求序列的長度。原序列位置從0開始標號,若原序列有序,返回0 保證a中元素均為正整數。思路 分別從 左 右 記錄最大元素值 比較最大元素值和當前遍歷元素的大小 如果 最大...